<p:selectOneMenu value="#{schoolBean.newContactTO.contactType}" converter="contacttypeconverter">
<f:selectItem itemLabel="select type"></f:selectItem>
<f:selectItems value="#{schoolBean.contactTypesConstant.data}" var="contacttype" itemLabel="#{contacttype.type}" itemValue="#{contacttype}"></f:selectItems>
</p:selectOneMenu>
<p:commandButton value="submit" actionListener="#{schoolBean.saveNewContactTO}"></p:commandButton>
我在PrimeFaces中为SelectOneMenu使用自定义转换器。转换器适用于getAsString(),但对于getAsObject,我不确定出了什么问题。 在这之后,primefaces UI就会被绞死,从此以后没有任何东西可以像我正在使用对话框一样,之后它就不起作用了。
这是我的自定义转换器文件:
@FacesConverter("contacttypeconverter")
public class ContactTypeConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component,String type) {
ContactTypeTO result=null;
System.out.println("type:"+type);
if(component instanceof SelectOneMenu){
result = new ContactTypeTO();
result.setType(""+type);
System.out.println("result:"+result);
}
System.out.println(""+result.getType());
return result;
}
@Override
public String getAsString(FacesContext context, UIComponent component,Object value) {
String result = "";
if( value instanceof ContactTypeTO){
result = ((ContactTypeTO)value).getType();
}
return result;
}}
以下是ContactTypeTO
public class ContactTypeTO {
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
schoolBean.newContactTO.contactType的类型为ContactTypeTO(如上所述)
在getAsObject中,我返回一个新的ContactTypeTO对象,但我无法弄清楚为什么转换器无法将值分配给SelectOneMenu中的schoolBean.newContactTO.contactType。 提交后,saveNewContactTO不会执行。 getAsObject方法根据需要执行,结果变量在返回时也有适当的数据。 我认为转换时存在一些问题,但我无法弄明白。