2013-08-05 28 views
0

我有一个通常在默认情况下被禁用的控件的facelets页面,即当页面首先呈现给客户端时。这是通过一个EL表达式确定:在呈现页面JSF组件的值没有正确地更新到提交时的模型

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

之后,用户可以设置requestbean.dependentControlValuereferenceValue和通过一些JavaScript为从属控制,部件“notWorking”被启用。

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

问题: 我在做什么错?

顺便说一句:
我知道,根据HTML规范,禁用控件不能成功,这要归功于StackOverflow的研究。

而且,我从this post知道,那disabledrendered表达式更新模型值之前考虑过,但是我觉得残疾人表达应当在提交表单评估,以false

回答

2

我在做什么错?

使用JavaScript而不是JSF重新启用输入。

作为JSF的对抗篡改/黑客入侵的HTTP请求内建保障的一部分,disabled属性(如renderedreadonly属性)处理表单提交期间重新评估。如果他们以这样的方式评估该值不应该被处理(即,disabled/readonly=truerendered=false,那么提交的值将不被应用,转换,验证并且模型将不被更新)

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

+0

感谢@BalusC,尤其是对于修改您的所以,使用jsf 2,我只是简单地使用由依赖控件触发的部分请求,并重新呈现'notWorking'组件,我怎样才能用j实现你的解决方案sf1.2? – omilke