JSF组件值未正确更新为提交时的模型

时间:2013-08-05 12:47:31

标签: jsf facelets jsf-1.2 myfaces

我有一个带有控件的facelets页面,默认情况下通常是禁用的,i。即当页面首次呈现给客户端时。这由EL表达式决定:

disabled="#{referenceValue != requestbean.dependentControlValue}" id="notWorking"

在呈现页面后,用户可以将requestbean.dependentControlValue设置为referenceValue,并通过一些Javascript作为从属控件,启用组件“notWorking”。

但是,在提交表单时,notWorking的值不会通过在setter中为值添加调试日志消息而更新。我可以看到,notWorking的值在使用firefox检查时在请求中设置。

问题: 我做错了什么?

顺便说一下:
我知道根据HTML规范,由于StackOverflow上的研究,禁用的控件无法成功。

此外,我从this post了解到,在更新模型值之前会考虑disabledrendered表达式,但我认为禁用的表达式应该计算为false提交表格后。

1 个答案:

答案 0 :(得分:2)

  

我做错了什么?

使用JavaScript代替JSF重新启用输入。

作为JSF针对篡改/被攻击的HTTP请求的内置安全措施的一部分,disabled属性(如renderedreadonly属性)在处理表单提交期间重新评估。如果他们评估的方式根本不应该处理该值(即disabled/readonly=truerendered=false,那么提交的值将不会被应用,转换,验证并且模型将不会被更新。

解决方案是使用JSF而不是JavaScript来重新启用输入,或以这种方式重写disabled属性中的条件,以便disabled属性评估false在处理表格提交期间。