禁用时为InputText值null为true

我的JSF页面上有一个inputText,并附加了一个JavaScript日历弹出窗口。 有条件地我将inputText disabled属性设置为true和false。

当我设置disabled = true并且然后我将JSF值写入数据库时​​,inputText中的值为null。 我相信这是由于disabled = true

有没有办法保留inputText框中的值,即使disabled = true

我正在使用JSF 1.1。

另一种解决方法是在提交表单时临时启用此输入,并在更新模型后再次禁用它。 还有一些解决方案使用具有相同ID的隐藏输入,但不幸的是我不记得它是如何工作的。

您应该尝试readonly = true而不是disabled = true(就像在纯HTML中一样)

浏览器遵循HTML 4.0.1规范 :

成功的控制对于提交是“有效的”。

……删除文字……

  • 禁用的控件无法成功。

禁用表单控件不作为表单的一部分提交。

作为额外的安全措施,如果发现isDisabled() == true则JSF组件呈现器不应处理“ 应用请求值”阶段中的

从HTML渲染工具包doc :

如果Renderer选择实现解码行为,它必须参考要呈现的组件的“disabled”和“readonly”属性,如果任一属性的值等于,忽略大小写,则字符串“true”(不带引号) )decode方法必须不采取任何操作并立即返回。

由于Apply Request Values阶段首先运行,因此表单提交中的任何内容都不会影响对这些布尔值的评估(除非您将它们绑定到#{param.foo}表达式 – 请注意任何安全注意事项)。

您的表单设计和提交策略必须考虑这些约束。

当您设置disabled = truereadonly = trueJSF机制不会发送(或处理)值。 这就是你在DB中写一个空值的原因。

作为解决方案,您必须将值存储在变量中并使用属性disabled = trueinputText显示它。