我最近遇到过一种情况,我希望使用ui:repeat varStatus="v"
从<h:inputHidden="#{v.index}/>
设置索引值。如果您使用AJAX尝试此execute
组件,您将获得该属性不可写的异常。在环顾四周时,我发现inputHidden
支持readonly="true"
属性,这样做会导致错误消失。
有没有理由不在文档中? (即特别,直通,其他) 使用安全吗?
答案 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}" />