禁用时,InputText值为null

时间:2011-08-07 08:16:06

标签: java jsf

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

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

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

我正在使用JSF 1.1。

4 个答案:

答案 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阶段的值。

来自HTML render kit doc

  

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

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

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

答案 3 :(得分:1)

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

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