0

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

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

页面呈现后,用户可以设置依赖控件requestbean.dependentControlValuereferenceValue并通过一些Javascript,启用组件“notWorking”。

但是,在提交表单时,notWorking不会像通过在值的设置器中添加调试日志消息所发现的那样更新值。notWorking我可以看到,在使用 Firefox 检查请求时,它的值是在请求中设置的。

问题: 我做错了什么?

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

此外,我从这篇文章中知道,在更新模型值之前会考虑disabledandrendered表达式,但我认为禁用的表达式应该false在提交表单时评估为。

4

1 回答 1

2

我究竟做错了什么?

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

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

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

于 2013-08-05T12:54:15.603 回答