【问题标题】:Bind h:selectBooleanCheckbox value to int/Integer instead of boolean/Boolean将 h:selectBooleanCheckbox 值绑定到 int/Integer 而不是 boolean/Boolean
【发布时间】:2011-08-08 01:40:24
【问题描述】:

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

我使用 MyFaces 2、Tomahawk 和 Tomcat 6。

【问题讨论】:

    标签: jsf checkbox int boolean converter


    【解决方案1】:

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

    问题更多在于您的模型,为什么要使用int 来表示布尔状态?改变你的模型,让它成为一个完全值得的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}" />

    【讨论】:

    • 谢谢!我将使用包装方法,因为模型不是我的。
    • 可能被视为垃圾邮件,但巴鲁斯我爱你。我遇到了同样的问题并提供了一个未触发的自定义转换器。为我节省了大量时间。谢谢!
    • @asrijaal:不客气,但很抱歉我已经结婚了。
    • 如何扭曲两个值?
    【解决方案2】:

    只是说 MySQL 没有 boolean 作为字段类型选择,它可能是这种需求的一个例子。

    【讨论】:

    • 我只是在持久性/模型方面而不是业务方面解决它。如果是 JDBC,例如 model.setSomeBoolean(resultSet.getInt(columnname) != 0) 等等。如果 JPA 可以创建自定义映射类型。
    【解决方案3】:

    您可以在 MySQL 中将字段设置为tinyint。实际上问题是在创建布尔变量时获取方法名称。使用方法名称getChecked() 而不是isChecked()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-24
      • 2021-10-08
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多