代码之家  ›  专栏  ›  技术社区  ›  finrod

JAXB布尔处理异常和JSF

  •  1
  • finrod  · 技术社区  · 16 年前

    JAXB中有一个已知的错误: https://jaxb.dev.java.net/issues/show_bug.cgi?id=733

    JAXB不能正确地生成布尔字段getter和setter,为了向后兼容,这个bug没有被修复。

    一个JAXB插件存在,并确保生成以下用于布尔字段的吸收器和设置器:

    1. 生成setXXX(布尔值)
    2. 获取XXX() 是生成的
      • 如果boolean属性指定XSD中的默认值,则getXXX()返回 布尔型 ,
      • 如果boolean属性没有在XSD中指定default,那么getXXX()返回 布尔型 .

    问题 :试图编辑/查看JSF组件(如checkbox)中的XXX字段不起作用-该组件被禁用。

    我使用ApacheTrinidad1.2。部件编码如下:

    <tr:selectBooleanCheckbox value="#{MvsDatasetUI.object.mvsDataset.temporary}" id="temporary" converter="javax.faces.Boolean" />
    

    我没有深入跟踪这个问题,但假设(由下面的解决方法支持)JSF EL resolver(或whathaveyou)查找Boolean getXXX()方法,由于找不到它,所以该组件被禁用。

    解决办法 :如果我将getXXX()方法更改为返回Boolean,则一切都将进行。

    问题 :

    • 你对如何以最快的方式集体解决这个问题有什么想法?
      • 我错过了布尔getter JAXB插件的一些定制吗?
    • 有没有可能(有意义)改变JSF解析器( 或者你想干什么 )如果找不到Boolean getXXX(),它将返回到Boolean getXXX()?

    我不希望手动干预并将所有生成的getXXX()方法更改为返回布尔值而不是布尔值。

    1 回复  |  直到 16 年前
        1
  •  1
  •   BalusC    16 年前

    问题 :试图编辑/查看JSF组件(如checkbox)中的XXX字段不起作用-该组件被禁用。

    我已经使用JSF很多年了,但是在JSF中从来没有看到过这个特殊的问题。从技术上讲,组件也不可能根据其值的类型被禁用。它宁愿扔一个 PropertyNotFoundException 或者 ConverterException 当找不到属性或值类型不可转换时。

    我做了一个快速的测试 <h:selectBooleanCheckbox value="#{bean.checked}" /> 以及以下的吸气剂:

    • public boolean isChecked() 工作正常。
    • public boolean getChecked() 工作正常。
    • public Boolean isChecked() 投掷 PropertyNotFoundException属性 渲染期间(正确)。
    • public Boolean getChecked() 工作正常。

    基于这些信息,我会重新调查这个问题并回顾结论。你不是在使用一些自动生成的或者第三方的JSF代码吗?你仔细检查过JSF代码吗?它不只是在一些 disabled 属性?这个 Boolean 默认值为 null 虽然 boolean 默认为 false . 两者 无效的 在EL有不同的行为。