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