我有一个包含字段creditCard
的支持bean,它可以从DB填充两个字符串值y
或n
。我想在复选框中显示此内容,以便将y
和n
转换为boolean
。
我该如何实施?我无法使用自定义转换器,getAsString()
在呈现响应时返回String
,而我需要boolean
。
答案 0 :(得分:19)
<h:selectBooleanCheckbox>
组件不支持自定义转换器。该物业必须是boolean
。周期。
你可以做的最好的事情是在持久层中进行转换,或者添加额外的布尔getter / setter来装饰原始y
/ n
getter / setter或者只是替换旧的getter / setter一起。 E.g。
private String useCreditcard; // I'd rather use a char, but ala.
public boolean isUseCreditcard() {
return "y".equals(useCreditcard);
}
public void setUseCreditcard(boolean useCreditcard) {
this.useCreditcard = useCreditcard ? "y" : "n";
}
然后在<h:selectBooleanCheckbox>
中使用它。
<h:selectBooleanCheckbox value="#{bean.useCreditcard}" />
答案 1 :(得分:0)
我有类似的问题,我同意上一篇文章,你应该在持久层中处理这个问题。 但是,还有其他解决方案。我的问题是下一个:我在数据库中有TINYINT列,表示布尔值为true或false(0 = false,1 = true)。所以,我想在我的JSF应用程序中显示它们并将其作为布尔值处理。不幸的是,这不太可能,或者我没有找到合适的方法。但是使用复选框,我的解决方案是使用selectOneMeny并将这些值转换为&#34;是&#34;或&#34;否&#34;。这是代码,所以有类似问题的人可以使用它。
转换器:
@FacesConverter("booleanConverter")
public class BooleanConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
short number= 0;
try {
if (value.equals("Yes")) {
number= 1;
}
} catch (Exception ex) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_FATAL);
message.setSummary(MessageSelector.getMessage("error"));
message.setDetail(MessageSelector.getMessage("conversion_failed") + ex.getMessage());
throw new ConverterException(message);
}
return number;
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
JSF页面:
<h:selectOneMenu id="selectOnePlayerSucc" value="#{vezbaTrening.izvedenaUspesno}" converter="booleanConverter">
<f:selectItems id="itemsPlayerSucc" value="#{trainingOverview.bool}" var="opt" itemValue="#{opt}" itemLabel="#{opt}"></f:selectItems>
在我的ManagedBean中,我创建了一个包含可能值的列表(&#34;是&#34;和&#34;否&#34;)
private List<String> bool;
public List<String> getBool() {
return bool;
}
public void setBool(List<String> bool) {
this.bool = bool;
@PostConstruct
public void init () {
...
bool = new LinkedList<>();
bool.add("Yes");
bool.add("No");
}
答案 2 :(得分:0)
您可以将BooleanConverter用于java原语,这会将文本解析为您的managedbean中的boolean,here只需在您的.xhtml文件中输入您的代码
<p:selectOneMenu id="id"
value="#{yourMB.booleanproperty}"
style="width:60px" converter="javax.faces.Boolean">
<p:ajax listener="#{yourMB.anylistener}"
update="anyIDcontrol" />
<f:selectItem itemLabel="------" itemValue="#{null}"
noSelectionOption="true" />
<f:selectItem itemLabel="y" itemValue="true" />
<f:selectItem itemLabel="n" itemValue="false" />
</p:selectOneMenu>
ManagedBean:
@ManagedBean(name="yourMB")
@ViewScoped
public class YourMB implements Serializable {
private boolean booleanproperty;
public boolean isBooleanproperty() {
return booleanproperty;
}
public void setBooleanproperty(boolean booleanproperty) {
this.booleanproperty = booleanproperty;
}
}