JSF 2 复选框和布尔值获取器

2024-03-25

我正在生成一个基于 web 服务的 jaxws 客户端。 Jaxb 将使用 java.lang.Boolean 而不是原始类型生成布尔值。除此之外,它还会生成 bean 的 is() 命名约定。

但是,如果我尝试将布尔值(例如 isOptional())链接到复选框,它将引发以下异常:

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

我的谷歌技能告诉我 jsf 可以很好地工作:

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

但不与

Boolean isOptional()

然而,由于Web服务的大小和数量,手动更新bean是不可行的,那么有没有办法让jsf正确使用java.lang.Boolean isOptional()?或者我可以在生成时在 jaxb 绑定文件中以某种方式定义一个属性来神奇地生成“getOptional()”吗?

顺便说一句,以下方法确实有效:

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

但是,我实际上无法更新该值,可能是因为它找不到设置器。

EDIT:我运行的是最新的jdk 7,“java -version”的输出:

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;
}

Jaxb 将使用 java.lang.Boolean 而不是原始类型生成布尔值。除此之外,它还会生成 bean 的 is() 命名约定。

使用isgetter 前缀java.lang.Boolean是 JAXB 的一个已知的重大错误。2.1.13版本已修复 http://java.net/jira/browse/JAXB-131已于 2010 年 4 月发布。让您的库保持最新状态。

也可以看看这篇博客文章 http://www.mojavelinux.com/blog/archives/2006/09/the_great_jaxb_api_blunder/一些背景。

JAXB API 的大错误

September 15, 2006

你必须把这件事交给Sun,因为他搞砸了这件事。当文档像教科书一样厚时,编写不符合规范的软件是一回事。以 W3C 创建的任何内容为例。然而,当你无法遵循你自己的规范时,尤其是当它是其中最著名的部分时,这真的很糟糕。没错,Sun 在创建 JAXB 2.0 API 时在他们自己的规范上落后了一大截。在为 java.lang.Boolean 属性生成 getter 方法时,JAXB 2.0 编译器 (XJC) 错误地使用了前缀“is”而不是“get”。虽然 JavaBean 规范规定原始布尔值的读取方法可以使用备用“is”前缀,但这种灵活性并没有扩展到其对应的布尔包装器。

8.3.2 布尔属性

此外,对于布尔属性,我们允许 getter 方法来匹配模式:

public boolean is();

可以提供该“is”方法来代替“get”方法,或者可以除了“get”方法之外还提供该“is”方法。在任何一种情况下,如果布尔属性存在“is”方法,那么我们将使用“is”方法来读取属性值。

布尔属性的示例可能是:

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

鉴于 JAXB 是一个代码生成框架,并且代码生成框架背后的想法是代码“按原样”使用,之后不再修改,这是一个相当大的“哎呀”。虽然这个问题已经被报道,但 Sun 的回应是“抱歉,为时已晚”。

这种行为是由规范控制的,不幸的是现在改变规范已经太晚了。

就用户体验而言,由于自动装箱,我认为这对人们来说不会是一个真正的问题。问题是您正在使用 Introspector 并且缺少该属性吗? 为时已晚?不是真正的问题吗?它坏了。修理它!我也不喜欢这种天真的说法,即它可能不会影响框架。嗯,是的,考虑到其他项目确实遵守了规范(hibernate、spring、myfaces 等)

更新:Stevo Slavic 告诉我,这个问题已在 JAXB 2.1.13 中修复。看JAXB-131 http://java.net/jira/browse/JAXB-131了解详情。是的!

JSF/EL 在此没有错误。它正在正确地完成其工作,符合JavaBeans 规范 http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF 2 复选框和布尔值获取器 的相关文章

随机推荐

  • 在 MySQL 中使用 JOIN 时避免出现不明确的列错误

    我的查询如下所示 sql SELECT u s FROM bands u inner join statuses s on u status id s id WHERE u status id 1 ORDER BY u band name
  • CGBitmapContextCreate:不支持的参数组合

    我正在尝试创建一个 8 位灰度上下文 如下所示 CGColorSpaceRef colorSpace CGColorSpaceCreateDeviceGray CGContextRef context CGBitmapContextCrea
  • Interface Builder:如何清理已删除的约束?

    我使用命令删除来删除 IB 中地图视图小部件的一些约束 正如附图所示 约束实际上只是褪色 而不是完全删除 我已经尝试过保存文件并重新打开项目 但似乎它们不会被 XCode 删除 我怎样才能将它们删除 EDIT 这是我在尺寸检查器窗口中看到的
  • 连续输入时不要引发 TextChanged

    我有一个相当大的文本框 TextChanged事件处理程序 在正常打字条件下 性能还不错 但当用户执行长时间连续操作时 例如按住退格按钮一次删除大量文本 它可能会明显滞后 例如 事件需要 0 2 秒才能完成 但用户每 0 1 秒执行一次删除
  • 仅用图像制作按钮的最简单方法

    我正在使用 Delphi XE 我想制作一个按钮 仅显示提供的具有透明背景的 PNG 图像 并且没有任何类型的附加边距 我尝试使用 TButton 执行此操作 但我得到了 bsPushButton 样式的难看的灰色背景 如果我使用 bsCo
  • Gradle 无法解析 com.google.android.gms:play-services-auth:11.6.0 [重复]

    这个问题在这里已经有答案了 我正在尝试在我的移动应用程序中使用谷歌登录 但在遵循谷歌的教程后出现以下错误 无法解析 com google android gms play services auth 11 6 0 我的 gradle 文件
  • 在 UIButton 内显示活动指示器

    我想在按下 UIButton 后将其内容更改为 ActivityIndi cator 我知道按钮有 imageView 和 titleLabel 但我不知道如何在其中放置活动指示器 这就是我创建活动指标的方法 let aiView UIAc
  • PostgreSQL ORDER BY 列位置(而不是按列名称)

    基本上 我不想要 SELECT firstname lastname FROM person ORDER BY lastname 反而 SELECT firstname lastname FROM person ORDER BY
  • 单个 XSLT 文件能否解决这个问题……或者……?

    下面是我的 XML 文件
  • do while 循环不能有两个 cin 语句吗?

    我只是遵循一个关于 do while 循环的简单 C 教程 我似乎已经完全复制了教程中编写的内容 但我没有得到相同的结果 这是我的代码 int main int c 0 int i 0 int str do cout lt lt Enter
  • 如何在 BigQuery 中透视表

    我正在使用 Google Big Query 并且正在尝试从公共样本数据集中获取数据透视结果 对现有表的简单查询是 SELECT FROM publicdata samples shakespeare LIMIT 10 该查询返回以下结果集
  • 如何前进到字节流中包含的压缩字节序列?

    我有一个字节流 它是多个部分的串联 其中每个部分都由一个标头和一个紧缩的字节流组成 我需要拆分此字节流部分 但标头仅包含有关未压缩形式的数据的信息 没有有关压缩数据长度的提示 因此我可以在流中正确前进并解析下一部分 到目前为止 我发现超越压
  • Rake 任务 Rails:upgrade:check 在 Windows 上不起作用。 Rails 3 升级问题

    有什么解决方案可以解决Windows上的rake任务rails upgrade check的问题吗 为了解决这个问题 我安装了这个 gem gem install POpen4 v 0 1 4 gem install win32 open3
  • 您如何组织 NInject 模块?

    NInject 的模块架构看起来很有用 但我担心它会变得有点混乱 您如何组织模块 您将它们保留在哪个组件中 您如何决定哪些接线进入哪个模块 每个子系统都有一个模块 当然 什么值得归类为 子系统 的定义取决于 在某些情况下 某些绑定的责任被推
  • 我的自定义开放图对象的自定义属性未显示在共享对话框中

    我无法获取 Android 应用程序的共享对话框中显示的自定义开放图对象的自定义属性 我创建了一个自定义对象channel在命名空间中myradio android 并定义了一个自定义属性当前歌曲标题在频道中 我还创建了一个自定义操作enj
  • 将 Marketo 表单添加到 Gatsby/JSX

    我正在尝试将 Marketo 表单添加到 Gatsby 站点中 但在将脚本注入页面的顺序方面遇到问题 当我尝试渲染下面的组件时 收到错误消息 ReferenceError MktoForms2 未定义 我尝试注释掉整个 useEffect
  • 如何在 UIMarkupTextPrintFormatter 中添加图像?

    我正在尝试使用直接 HTML 打印文件 但是 在将图像添加到打印文件中时遇到困难 如何在我要打印的 HTML 中引用项目中的图像 UIMarkupTextPrintFormatter 支持标签吗 实际上比我想象的要简单得多 NSString
  • 向 Firefox 扩展添加屏幕截图功能

    是否有跨平台方法从 Firefox 扩展中获取屏幕截图 理想情况下 我希望能够截取 dom 元素的屏幕截图 无论它在页面上是否可见 例如 var 屏幕截图 屏幕截图 document getElementById example 任何指示或
  • 在python中打印下标

    在Python 3 3中 有什么方法可以在打印时使字符串中的部分文本成为下标吗 例如H2 H 然后是下标 2 如果您只关心数字 则可以使用str maketrans https docs python org 3 library stdty
  • JSF 2 复选框和布尔值获取器

    我正在生成一个基于 web 服务的 jaxws 客户端 Jaxb 将使用 java lang Boolean 而不是原始类型生成布尔值 除此之外 它还会生成 bean 的 is 命名约定 但是 如果我尝试将布尔值 例如 isOptional