我有一个带有控件的facelets页面,默认情况下通常是禁用的,i。即当页面首次呈现给客户端时。这由EL表达式决定:
disabled="#{referenceValue != requestbean.dependentControlValue}" id="notWorking"
在呈现页面后,用户可以将requestbean.dependentControlValue
设置为referenceValue
,并通过一些Javascript作为从属控件,启用组件“notWorking”。
但是,在提交表单时,notWorking
的值不会通过在setter中为值添加调试日志消息而更新。我可以看到,notWorking
的值在使用firefox检查时在请求中设置。
问题: 我做错了什么?
顺便说一下:
我知道根据HTML规范,由于StackOverflow上的研究,禁用的控件无法成功。
此外,我从this post了解到,在更新模型值之前会考虑disabled
和rendered
表达式,但我认为禁用的表达式应该计算为false
提交表格后。
答案 0 :(得分:2)
我做错了什么?
使用JavaScript代替JSF重新启用输入。
作为JSF针对篡改/被攻击的HTTP请求的内置安全措施的一部分,disabled
属性(如rendered
和readonly
属性)在处理表单提交期间重新评估。如果他们评估的方式根本不应该处理该值(即disabled/readonly=true
和rendered=false
,那么提交的值将不会被应用,转换,验证并且模型将不会被更新。
解决方案是使用JSF而不是JavaScript来重新启用输入,或以这种方式重写disabled
属性中的条件,以便disabled
属性评估false
在处理表格提交期间。