JSF 2复选框和布尔干将(JSF 2 checkboxes and boolean getters

2019-09-18 10:01发布

我生成基于​​web服务的一个客户端JAXWS。 JAXB将使用java.lang.Boolean中代替基本类型的产生布尔值。 除此之外,它会产生的是()命名约定豆。

不过,如果我尝试布尔(如isOptional())链接到一个复选框,它会抛出以下异常:

value="#{property.optional}": Property 'optional' not readable on type java.lang.Boolean

我的谷歌技能已经通知我,JSF工作正常:

 boolean isOptional()
 boolean getOptional()
 Boolean getOptional()

但不能与

Boolean isOptional()

然而,它是不可行的更新豆手动由于尺寸和web服务的量,那么有没有什么办法,使正常的JSF使用的java.lang.Boolean isOptional()? 或者,我可以采用某种定义在生成时的JAXB绑定文件中的属性,它神奇地产生“getOptional()”?

在阿里纳斯,下面做工作:

<h:selectBooleanCheckbox value="#{property.isOptional()}"/>

但是我不能真正推测更新的价值,因为它无法找到的制定者。

编辑 :我运行的是最新的JDK 7,“Java的版本”的输出:

java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)

“的wsimport -version”的输出:

JAX-WS RI 2.2.4-b01

生成的代码:

public Boolean isOptional() {
    return optional;
}

Answer 1:

JAXB将使用java.lang.Boolean中代替基本类型的产生布尔值。 除此之外,它会产生的是()命名约定豆。

使用is吸气用前缀java.lang.Boolean是JAXB的一个已知的重大失误。 它已被固定在2.1.13版本被发布2010年4月了。 保持你的库是最新的。

另见本博客文章的一些背景。

大JAXB API大错

2006年9月15日

你得把它交给孙拧这一个。 这是一件事写一个不符合规范,当文档是作为一本教科书一样厚的软件。 举个例子来说,只是由W3C创造任何东西。 然而,这是非常糟糕的,当它是你自己的天赋,你不能跟随,特别是当它是它最有名的一部分。 这是正确的,太阳错过了自己的规格一英里时,他们创造了JAXB 2.0 API。 的JAXB 2.0编译器(XJC)错误地使用前缀“是”,而不是“获取”生成用于java.lang.Boolean的属性getter方法时。 而读取原始布尔值可以使用替代的方法JavaBean的规范规定“是”前缀,这种灵活性不延伸到它的布尔包装对应物。

8.3.2布尔属性

此外,对于布尔属性,我们允许的吸气剂的方法相匹配的图案:

 public boolean is(); 

可以提供,而不是一个“get”方法这“是”的方法,也可能除了“get”方法来提供。 在任一情况下,如果“是”的方法是存在用于一个布尔属性然后,我们将使用“是”方法来读取的属性值。

一个例子布尔属性可能是:

 public boolean isMarsupial(); public void setMarsupial(boolean m); 

鉴于JAXB是一个代码生成框架,后面的代码生成框架的想法是,该代码是用来“原样”和此后不修改,这是一个相当大的“糟糕”。 虽然这个问题已经被报告,Sun的回答是“对不起,为时已晚。”

此行为是由规范治理,可惜它只是为时已晚的规范来改变现在。

在用户体验方面,由于自动装箱,我不认为这将是人们一个真正的问题。 是您正在使用内部检查,它缺少属性的问题? 太晚了? 不是一个真正的问题? 它的分解。 修理它! 我也不喜欢天真的说法,这可能不会影响框架。 嗯,是的,它会考虑其他项目也发生坚持规范(休眠,春天,MyFaces的,等等)

UPDATE:斯特沃斯拉夫告诉我,这已被固定在JAXB 2.1.13。 见JAXB-131的详细信息。 是啊!

JSF / EL没有过错这里。 它做的工作符合正确的JavaBeans规范 。



Answer 2:

我不知道为什么最新和最伟大JAXB版本仍然会产生错误的方法,但我最后加入“-B-enableIntrospection”(按照固定它http://jaxb.java.net/2.2.4/docs/xjc的.html )到的wsimport通话。 这导致:

public Boolean getOptional() {
    return optional;
}


文章来源: JSF 2 checkboxes and boolean getters
标签: jsf jaxb jax-ws