我有一个 <h:selectBooleanCheckbox value="#{someBean.prop}">,其中 propint 类型的属性。真的不能马上生效吗?我是否必须实现自定义转换器才能将 Boolean 转换为 int ?有没有人碰巧有库存的转换器代码?我读到 JSF 2.0 中有一些错误会阻止处理 <h:selectBooleanCheckbox> 的转换器。任何人都可以确认吗?

我使用 MyFaces 2、Tomahawk 和 Tomcat 6。

最佳答案

<h:selectBooleanCheckbox>,顾名思义,应该绑定(bind)到 booleanBoolean 属性。没有其他的。它允许 converter 属性实际上是 bug in the spec 。它不应该允许它。

问题更多在您的模型中,为什么要使用 int 来表示 boolean 状态?改变你的模型,让它成为一个完整的 boolean

如果由于某种原因(第 3 方 API、愚蠢的架构师或愚蠢的业务限制等)无法更改模型,则将模型 getter/setter 包装在支持 bean 中,如下所示

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

public void setChecked(boolean checked) {
    someModel.setSomeInt(checked ? 1 : 0);
}

并将其用作 <h:selectBooleanCheckbox value="#{bean.checked}" />

关于jsf - 绑定(bind) h :selectBooleanCheckbox value to int/Integer instead of boolean/Boolean,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5706513/

10-13 08:19