为什么InputHidden只读属性不在JSF文档中?

时间:2013-07-12 22:59:16

标签: jsf

我最近遇到过一种情况,我希望使用ui:repeat varStatus="v"<h:inputHidden="#{v.index}/>设置索引值。如果您使用AJAX尝试此execute组件,您将获得该属性不可写的异常。在环顾四周时,我发现inputHidden支持readonly="true"属性,这样做会导致错误消失。

有没有理由不在文档中? (即特别,直通,其他) 使用安全吗?

2 个答案:

答案 0 :(得分:3)

做了一些挖掘后Core JavaServer Faces 3e有这样说:

  

h:inputHidden标记与其他输入标记具有相同的属性,但它不支持标准HTML和DHTML标记

因此,readonly的文档不在inputHidden的文档中以及为什么它没有在HTML中呈现的原因是因为inputHidden不支持它。当我尝试将readonly作为属性添加到inputHidden'(带有错误消息的红色波浪线)时,Netbeans也证实了这一点。当我提交了一个没有为{bean}属性定义setter的表单时,我能够获得该异常。{1}}。由于inputHidden在提交表单时调用inputHidden(对于我的情况),并且因为我的代码中没有定义,所以它当然会抛出异常,即:

setter

至于为什么它会这样做,我不知道。由于您担心安全问题,我建议您按照BalusC的说法进行操作,只需使用javax.el.PropertyNotWritableException: /index.xhtml @14,56 value="#{bean.x}": The class 'Bean' does not have a writable property 'x'. 或为该属性定义<input type="hidden">即可。不要那样使用它。

答案 1 :(得分:-1)

这个问题提出以来已经有很长的时间了,但是仅供参考,这很有效:

<h:inputHidden id="compId" readonly="#{true}" value="#{myBean.attribute}" />