我的JSF页面上有一个inputText,并附加了一个JavaScript日历弹出窗口。 有条件地我将inputText disabled属性设置为true和false。
当我设置disabled = true
然后我将JSF值写入数据库时,inputText中的值为null。我相信这是由于disabled = true
。
有没有办法在inputText框中保留值,即使disabled = true
?
我正在使用JSF 1.1。
答案 0 :(得分:3)
另一种解决方法是在提交表单时临时启用此输入,并在更新模型后再次禁用它。还有一些解决方案使用具有相同ID的隐藏输入,但不幸的是我不记得它是如何工作的。
答案 1 :(得分:2)
您应该尝试readonly = true而不是disabled = true(就像在纯HTML中一样)
答案 2 :(得分:2)
浏览器正在关注HTML 4.0.1 spec:
成功的控制对于提交是“有效的”。
...删除文字......
- disabled的控件无法成功。
禁用表单控件不会作为表单的一部分提交。
作为额外的安全措施,JSF组件renderer如果找到isDisabled() == true
,则不应处理Apply Request Values阶段的值。
如果渲染器选择实现解码行为,则必须参考要渲染的组件的“disabled”和“readonly”属性,如果任一属性的值等于,则忽略大小写,字符串“true”(如果没有引号,则解码方法必须不采取任何操作并立即返回。
由于 Apply Request Values 阶段首先运行,因此表单提交中的任何内容都不会影响对这些布尔值的评估(除非您将它们绑定到#{param.foo}
表达式 - 请注意任何安全注意事项)。
您的表单设计和提交策略必须考虑这些限制。
答案 3 :(得分:1)
当您设置disabled = true
或readonly = true
时, JSF 机制不会发送(或处理)这些值。这就是你在DB中写一个空值的原因。
作为解决方案,您必须将值存储在变量中,并使用属性inputText
在disabled = true
中显示。