JSF组件值在提交时未正确更新到模型
我有一个facelets页面,其中有一个控件通常在默认情况下被禁用,即。E当页面首次呈现给客户端时。这由EL表达式确定:JSF组件值在提交时未正确更新到模型,jsf,facelets,jsf-1.2,myfaces,Jsf,Facelets,Jsf 1.2,Myfaces,我有一个facelets页面,其中有一个控件通常在默认情况下被禁用,即。E当页面首次呈现给客户端时。这由EL表达式确定: disabled="#{referenceValue != requestbean.dependentControlValue}" id="notWorking" 呈现页面后,用户可以将requestbean.dependentControlValue设置为referenceValue,并通过依赖控件的一些Javascript启用组件“notWorking” 但是,在提交表
disabled="#{referenceValue != requestbean.dependentControlValue}" id="notWorking"
呈现页面后,用户可以将requestbean.dependentControlValue
设置为referenceValue
,并通过依赖控件的一些Javascript启用组件“notWorking”
但是,在提交表单时,notWorking
的值不会通过在setter中为该值添加调试日志消息而得到更新。我可以看到,notWorking
的值是在使用firefox检查请求时设置的
问题:
我做错了什么
顺便说一下:我知道,根据HTML规范,由于对StackOverflow的研究,禁用的控件不可能成功 此外,我从中了解到,在更新模型值之前会考虑
禁用的
和呈现的
表达式,但我认为在提交表单时,禁用的表达式应计算为false
我做错了什么
使用JavaScript而不是JSF重新启用输入
作为JSF针对篡改/黑客HTTP请求的内置保护措施的一部分,在处理表单提交期间,将重新评估disabled
属性(如rendered
和readonly
属性)。如果他们的评估方式是完全不应处理该值(即禁用/只读=真
和呈现=假
),则提交的值将不会应用、转换、验证,模型也不会更新
解决方案是使用JSF而不是JavaScript来重新启用输入,或者以这种方式重写
disabled
属性中的条件,以便disabled
属性在处理表单提交时计算false
。感谢@BalusC,特别是修改您的答案以准确回答我的问题因此,使用JSF2,我只需使用从依赖控件触发的部分请求,并重新呈现notWorking
组件。我如何使用jsf1.2实现您的解决方案?