我最近遇到了一个案例,我想通过ui:repeat varStatus="v"
using设置索引值<h:inputHidden="#{v.index}/>
。如果你尝试这个和execute
使用 AJAX 的组件,你会得到一个属性不可写的异常。在环顾四周时,我发现它inputHidden
支持一个readonly="true"
属性,它可以让错误消失。
文档中没有这有什么原因吗?(即特殊、直通、其他)使用安全吗?
我最近遇到了一个案例,我想通过ui:repeat varStatus="v"
using设置索引值<h:inputHidden="#{v.index}/>
。如果你尝试这个和execute
使用 AJAX 的组件,你会得到一个属性不可写的异常。在环顾四周时,我发现它inputHidden
支持一个readonly="true"
属性,它可以让错误消失。
文档中没有这有什么原因吗?(即特殊、直通、其他)使用安全吗?
在进行了一些挖掘之后,Core JavaServer Faces 3e有这样的说法:
h:inputHidden 标签具有与其他输入标签相同的属性,只是它不支持标准的 HTML 和 DHTML 标签
因此,为什么readonly
不在文档中inputHidden
以及为什么它没有在您的 HTML 中呈现的原因是因为inputHidden
不支持它。当我尝试将readonly
其作为属性添加到inputHidden
'(带有错误消息的红色波浪线)时,Netbeans 也证实了这一点。当我提交一个没有setter
为放置在inputHidden
. 由于在提交表单时inputHidden
调用(对于我的情况)并且由于我的代码中没有定义任何内容,因此它当然会抛出该异常,即:setter
javax.el.PropertyNotWritableException: /index.xhtml @14,56 value="#{bean.x}": The class 'Bean' does not have a writable property 'x'.
至于为什么当你这样做时它会起作用,我不知道。由于您担心安全性,我建议您按照 BalusC 的说明进行操作,只需使用或为该属性<input type="hidden">
定义 a 。setter
不要那样使用它。
自从这个问题开始以来已经很长时间了,但是仅供参考,这是有效的:
<h:inputHidden id="compId" readonly="#{true}" value="#{myBean.attribute}" />