@FacesConverter forClass-Attribute 不起作用
@FacesConverter forClass-Attribute does not work
我只想测试 @FacesConverter
-功能,然后卡在 forClass
-属性上 - 它不起作用 - 这是我的示例:
转换器Class:
@FacesConverter(forClass = Double.class)
public class TextToDoubleConverter implements Converter {
@Override
public Double getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
Double doubledValue = null;
try {
doubledValue = new Double(value);
} catch (NumberFormatException e) {
FacesMessage facesMessage = new FacesMessage("Fehler: ...");
facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ConverterException(facesMessage);
}
return doubledValue;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
}
}
ManagedBean:
@Model
public class SomeBean {
private Double someCommvertDouble;
public Double getSomeCommvertDouble() {
return someCommvertDouble;
}
public void setSomeCommvertDouble(Double someCommvertDouble) {
this.someCommvertDouble = someCommvertDouble;
}
}
index.xhtml:
<h:form>
<h:inputText value="#{someBean.someCommvertDouble}">
<!-- <f:converter converterId="com.java.ee.jsf.TextToIntConverter"/> -->
</h:inputText>
</h:form>
这里有什么问题吗?
@FacesConverter(forClass)
仅适用于还没有 built-in converter exist. The Double
type already has a builtin converter, the DoubleConverter
的自定义类型。已经在 faces-config.xml
中定义的任何转换器(例如内置转换器)将始终比使用 @FacesConverter
.
注释的转换器具有更高的优先级
您的转换器只有在您如下所示在 webapp 的 faces-config.xml
中明确注册而不是被注释时才会工作。
<converter>
<converter-for-class>java.lang.Double</converter-for-class>
<converter-class>com.example.YourDoubleConverter</converter-class>
</converter>
顺便说一下,考虑从 DoubleConverter
或 NumberConverter
扩展并委托给它。您可以在以下密切相关问题的链接中找到一些具体示例。
另请参阅:
- validating decimals inputs in JSF
- Need <f:convertNumber> to throw error when fractions or separator characters are used
- convertNumber shows 0,00 as a negative value
- How to standardize convertnumber usage in JSF for various components?
我只想测试 @FacesConverter
-功能,然后卡在 forClass
-属性上 - 它不起作用 - 这是我的示例:
转换器Class:
@FacesConverter(forClass = Double.class)
public class TextToDoubleConverter implements Converter {
@Override
public Double getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
Double doubledValue = null;
try {
doubledValue = new Double(value);
} catch (NumberFormatException e) {
FacesMessage facesMessage = new FacesMessage("Fehler: ...");
facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ConverterException(facesMessage);
}
return doubledValue;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
}
}
ManagedBean:
@Model
public class SomeBean {
private Double someCommvertDouble;
public Double getSomeCommvertDouble() {
return someCommvertDouble;
}
public void setSomeCommvertDouble(Double someCommvertDouble) {
this.someCommvertDouble = someCommvertDouble;
}
}
index.xhtml:
<h:form>
<h:inputText value="#{someBean.someCommvertDouble}">
<!-- <f:converter converterId="com.java.ee.jsf.TextToIntConverter"/> -->
</h:inputText>
</h:form>
这里有什么问题吗?
@FacesConverter(forClass)
仅适用于还没有 built-in converter exist. The Double
type already has a builtin converter, the DoubleConverter
的自定义类型。已经在 faces-config.xml
中定义的任何转换器(例如内置转换器)将始终比使用 @FacesConverter
.
您的转换器只有在您如下所示在 webapp 的 faces-config.xml
中明确注册而不是被注释时才会工作。
<converter>
<converter-for-class>java.lang.Double</converter-for-class>
<converter-class>com.example.YourDoubleConverter</converter-class>
</converter>
顺便说一下,考虑从 DoubleConverter
或 NumberConverter
扩展并委托给它。您可以在以下密切相关问题的链接中找到一些具体示例。
另请参阅:
- validating decimals inputs in JSF
- Need <f:convertNumber> to throw error when fractions or separator characters are used
- convertNumber shows 0,00 as a negative value
- How to standardize convertnumber usage in JSF for various components?