Jsf 2 定义自定义转换器时,FacesConverter注释中的value和forClass之间的优先顺序哪个更高?

Jsf 2 定义自定义转换器时,FacesConverter注释中的value和forClass之间的优先顺序哪个更高?,jsf-2,jsf-2.2,Jsf 2,Jsf 2.2,我将以下内容作为自定义转换器的注释 @FacesConverter(value="capsConverter", forClass=String.class) public class CapsConverter implements Converter{ @Override public Object getAsObject(FacesContext context, UIComponent component, String value) {

我将以下内容作为自定义转换器的注释

 @FacesConverter(value="capsConverter", forClass=String.class)
      public class CapsConverter implements Converter{
       @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return value.toUpperCase(); 
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,Object value) {
        if(value!=null && value instanceof String){
            String s = (String)value;
            s = WordUtils.capitalize(s.toLowerCase());
            return s;
        }
        return null;
    }

     }
问题是,转换器有时会被调用,即使我在页面中没有显式调用它,forClass是否与InputExt的干扰有关,我是否应该只使用value并删除forClass=String.class


任何光线都是值得赞赏的。

这实际上是注册转换器的两种不同方式。两者都是相互排斥的。它们彼此没有影响,你可以忽略其中一个

forClass属性将在JSF应用程序中注册转换器,以便在处理和呈现指定类型的每个模型值时启动。换句话说,使用forClass=String.class,转换器将为每个字符串类型的输入和输出隐式调用,除非关联的输入/输出组件已经声明了显式转换器

通常,forClass只用于自定义/复杂类型,而不用于JSF已经内置隐式转换器的标准类型,如String、Long、BigDecimal等

因此,您确实应该删除它并仅依赖转换器ID

@FacesConverter("capsConverter")
大约

<f:viewParam name="id" value="#{bean.person}" />
不需要bean中的任何附加逻辑就可以访问bean中的fullworthy实体属性

private Person person;

非常感谢巴卢斯克为我澄清了这个问题。非常感谢。你似乎没有意识到你应该接受一个对理解和解决问题最有帮助的答案。在中,您只接受了一次,这是基于明确的请求。有更多的问题和答案,似乎已经解决了你的问题的基础上的评论,但他们都不被接受。这不是堆栈溢出的工作方式。请全部复习。但是,如果没有答案是可接受的,并且你已经自己找到了答案,那么你有义务自己发布并标记为已接受。通过这种方式,您可以实现更好的可搜索堆栈溢出。人们当然希望看到答案被接受的问题。谢谢你提醒我,我通常大部分时间都投赞成票,认为这是接受答案的一种方式。再次感谢你,巴卢斯克
<f:viewParam name="id" value="#{bean.person}" />
/edit-person.xhtml?id=42
private Person person;