【问题标题】:JSF component value not properly updated to model upon submitJSF 组件值在提交时未正确更新为模型
【发布时间】:2013-08-05 12:47:31
【问题描述】:

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

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

页面渲染完成后,用户可以将requestbean.dependentControlValue设置为referenceValue,并通过依赖控件的一些Javascript,启用组件“notWorking”。

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

问题: 我做错了什么?

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

此外,我从this post 知道,disabledrendered 表达式在更新模型值之前会被考虑,但我认为禁用的表达式在提交表单时应该评估为 false

【问题讨论】:

    标签: jsf facelets jsf-1.2 myfaces


    【解决方案1】:

    我做错了什么?

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

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

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

    【讨论】:

    • 感谢@BalusC,特别是修改您的答案以准确回答我的问题。因此,使用 jsf 2,我只需使用从相关控件触发的部分请求,并重新呈现 notWorking 组件。如何使用 jsf1.2 实现您的解决方案?
    猜你喜欢
    • 2012-10-19
    • 2021-10-15
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多