禁用时为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 = true
或readonly = true
, JSF机制不会发送(或处理)值。 这就是你在DB中写一个空值的原因。
作为解决方案,您必须将值存储在变量中并使用属性disabled = true
在inputText
显示它。