【发布时间】:2014-04-20 20:06:00
【问题描述】:
我要求所有布尔字段都应作为“Y”和“F”值保存在数据库中。在我的表单中,我使用 primefaces <p:selectBooleanCheckbox> 来检索布尔输入:
<h:outputLabel for="termsOfUseAck" value="#{msg['user_sign_up.terms_of_use_ack']}" />
<p:selectBooleanCheckbox id="termsOfUseAck" value="#{accountRegistrationController.account.termsOfUseAck}" converter="booleanToYNConverter" />
而我的转换器定义如下:
@FacesConverter(value="booleanToYNConverter")
public class BooleanToYNConverter implements Converter {
public BooleanToYNConverter() {
}
public Object getAsObject(FacesContext facesContext,
UIComponent uiComponent,
String param) {
try {
Boolean result = Boolean.parseBoolean(param);
System.out.println("#BooleanToYNConverter.getAsObject param is: " + param);
return result;
} catch (Exception exception) {
throw new ConverterException(exception);
}
}
public String getAsString(FacesContext facesContext,
UIComponent uiComponent,
Object obj) {
try {
if ((obj != null) && ((Boolean) obj)) {
System.out.println("#BooleanToYNConverter.getAsString returns Y");
return "Y";
} else {
System.out.println("#BooleanToYNConverter.getAsString returns N");
return "N";
}
} catch (Exception exception) {
throw new ConverterException(exception);
}
}
}
在控制台中我可以看到转换器被调用并返回单个字符:
#BooleanToYNConverter.getAsString returns Y
但不幸的是,最终accountRegistrationController.account.termsOfUseAck 设置为true 或false 值,而不是所需的Y 或N。我在做什么?
【问题讨论】:
-
感谢您的评论。请问在getter和setter上使用包装器是否是我唯一的选择?这是我的第一个想法,但我认为转换器更优雅且易于维护。
-
最简单的方法是设置 Y 或 N 基于 true false 通过执行 entity.setColumn(termsOfUseAck?"Y":"N")。
标签: java jsf jsf-2 primefaces converter