将h:selectBooleanCheckbox值绑定到int/Integer而不是boolean/Boolean

gee*_*daa 11 int checkbox jsf boolean converter

我有一个<h:selectBooleanCheckbox value="#{someBean.prop}">地方prop是一个类型的属性int.它真的不能马上工作吗?我是否必须实现自定义转换器才能转换Booleanint?有没有人碰巧在库存中有转换器代码?我读到JSF 2.0中存在一些错误,可以防止转换器<h:selectBooleanCheckbox>被处理.任何人都可以证实吗?

我使用MyFaces 2,Tomahawk和Tomcat 6.

Bal*_*usC 25

<h:selectBooleanCheckbox>应,正如它的名字说,被绑定到一个booleanBoolean财产.没有其他的.它允许converter属性实际上是规范中的一个错误.它永远不应该允许它.

问题出在你的模型中,你为什么要用a int来表示一个布尔状态?改变你的模型让它变得更有价值boolean.

如果由于某种原因(第三方API,愚蠢的架构师或愚蠢的业务限制等)更改模型不是一个选项,那么将模型getter/setter包装在支持bean中,如下所示

public boolean isChecked() {
    return someModel.getSomeInt() != 0;
}

public void setChecked(boolean checked) {
    someModel.setSomeInt(checked ? 1 : 0);
}
Run Code Online (Sandbox Code Playgroud)

并用它代替<h:selectBooleanCheckbox value="#{bean.checked}" />.

  • @asrijaal:非常欢迎你,但对不起,我已经结婚了. (3认同)