3

我最近遇到了一个案例,我想通过ui:repeat varStatus="v"using设置索引值<h:inputHidden="#{v.index}/>。如果你尝试这个和execute使用 AJAX 的组件,你会得到一个属性不可写的异常。在环顾四周时,我发现它inputHidden支持一个readonly="true"属性,它可以让错误消失。

文档中没有这有什么原因吗?(即特殊、直通、其他)使用安全吗?

4

2 回答 2

4

在进行了一些挖掘之后,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不要那样使用它。

于 2013-07-13T01:57:12.007 回答
-1

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

<h:inputHidden id="compId" readonly="#{true}" value="#{myBean.attribute}" />
于 2020-06-29T20:06:12.850 回答