@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>

顺便说一下,考虑从 DoubleConverterNumberConverter 扩展并委托给它。您可以在以下密切相关问题的链接中找到一些具体示例。

另请参阅:

  • 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?