jsf中的转换器不工作

jsf中的转换器不工作,jsf,jsf-2,converter,Jsf,Jsf 2,Converter,stringFilterConverter和someFunction根本不被调用。 既然我已经设置了一个转换器,为什么jsf不使用它并使用toString()来更新该值呢 我的转换器实现是一个CDIBean。我找到了解决办法。我将转换器的范围从默认范围更改为应用范围。现在转换器工作了。但是为什么呢 这是我的转换器实现: javax.faces.component.UpdateModelException: java.lang.IllegalArgumentException: Cannot co

stringFilterConverter和someFunction根本不被调用。 既然我已经设置了一个转换器,为什么jsf不使用它并使用toString()来更新该值呢


我的转换器实现是一个CDIBean。我找到了解决办法。我将转换器的范围从默认范围更改为应用范围。现在转换器工作了。但是为什么呢

这是我的转换器实现:

javax.faces.component.UpdateModelException: java.lang.IllegalArgumentException: Cannot convert com.bolan.fzsystem.appserver.view.model.StringFilter@17dbb2e of type class java.lang.String to class com.bolan.fzsystem.appserver.view.model.StringFilter
....
Caused by: java.lang.IllegalArgumentException: Cannot convert com.bolan.fzsystem.appserver.view.model.StringFilter@17dbb2e of type class java.lang.String to class com.bolan.fzsystem.appserver.view.model.StringFilter
....
@Named
@应用程序范围//将范围从默认更改为此
公共类StringFilterConverter实现转换器,可序列化{
私有静态最终长serialVersionUID=-6691961589607931061L;
@凌驾
公共对象getAsObject(FacesContext上下文、UIComponent组件、字符串值){
if(value==null | | value.isEmpty()){
返回值filter.UNDEFINE;
}
返回JSON.parseObject(值,newTypeReference(){});
}
@凌驾
公共字符串getAsString(FacesContext上下文、UIComponent、对象值){
ValueFilter=(ValueFilter)值;
返回JSON.toJSONString(过滤器);
}
}

在您的代码片段中,您将转换器定义为
converter=“#{stringFilterConverter}”
但是我认为您不应该用EL表达式语法包装转换器的名称,因此正确使用转换器应该是:

@Named
@ApplicationScoped //change scope from default to this
public class StringFilterConverter implements Converter, Serializable {
   private static final long serialVersionUID = -6691961589607931061L;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || value.isEmpty()) {
            return ValueFilter.UNDEFINE;
        }
        return JSON.parseObject(value, new TypeReference<String>() {});
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        ValueFilter<String> filter = (ValueFilter<String>) value;
        return JSON.toJSONString(filter);
    }
}

我的转换器实现是一个CDIBean。我找到了解决办法。我将转换器的范围从默认范围更改为应用范围。现在转换器工作了。但是为什么?你能用转换器实现更新你的答案吗?请阅读这篇非常有趣的文章
@Named
@ApplicationScoped //change scope from default to this
public class StringFilterConverter implements Converter, Serializable {
   private static final long serialVersionUID = -6691961589607931061L;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || value.isEmpty()) {
            return ValueFilter.UNDEFINE;
        }
        return JSON.parseObject(value, new TypeReference<String>() {});
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        ValueFilter<String> filter = (ValueFilter<String>) value;
        return JSON.toJSONString(filter);
    }
}
<p:selectOneMenu id="tag1" value="#{attachmentManagement.tag1} converter="stringFilterConverter"/>