为什么JSF文档中没有InAuthidden readonly属性?

为什么JSF文档中没有InAuthidden readonly属性?,jsf,Jsf,我最近遇到了一个案例,在做了一些挖掘之后,我想使用从ui:repeat varStatus=“v”设置索引值,我想说: h:inputHidden标记与其他输入标记具有相同的属性,只是它不支持标准HTML和DHTML标记 因此,readonly不在inpurthidden的文档中,也不在HTML中呈现它的原因是因为inpurthidden不支持它。当我试图将readonly作为属性添加到inpurthidden”时,Netbeans也证实了这一点(带有错误消息的红色曲线)。当我提交一个表单时,没

我最近遇到了一个案例,在做了一些挖掘之后,我想使用
ui:repeat varStatus=“v”
设置索引值,我想说:

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

因此,
readonly
不在
inpurthidden
的文档中,也不在HTML中呈现它的原因是因为
inpurthidden
不支持它。当我试图将
readonly
作为属性添加到
inpurthidden
”时,Netbeans也证实了这一点(带有错误消息的红色曲线)。当我提交一个表单时,没有为我的bean属性定义
setter
,该属性被放置在
inpurthidden
中,我就能够得到这个异常。由于
inpurthidden
在提交表单时调用
setter
(针对我的情况),并且由于我的代码中没有定义任何内容,它当然会抛出该异常,即:

javax.el.PropertyNotWritableException: /index.xhtml @14,56 value="#{bean.x}": The class 'Bean' does not have a writable property 'x'. 

至于你这么做的原因,我不知道。由于您担心安全问题,我建议您按照BalusC所说的做,只需使用
,或者为该属性定义一个
setter
。不要那样使用它

从这个问题开始到现在已经有很长一段时间了,不过仅供参考,这是可行的:

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


只需使用
?为什么它必须是JSF组件本身?除了好奇之外,我没有什么好的理由。如果我将它标记为只读,那么就不需要使用JSF。另一方面,我可以想到许多使用EL玩
readonly
的用例,我很好奇为什么它没有被记录在任何地方?谢谢你花时间回答。我检查了生成的HTML,它似乎不是传递属性,因为它没有在HTML上呈现。我能想象的不调用setter的唯一两种方法是,如果html没有在表单中包含setter(没有在html中呈现),或者JSF读取属性并跳过
setValue
。setter不可用的原因是我正在绑定
ui:repeat
varStatus.index
,我不控制它(没有setter),也不想设置它。我的关键问题是,为什么在JSF文档中找不到这个?我不知道,但似乎只有文档只包含JSF特定的属性。我的答案上的链接显示了所有的HTML
input
属性和
readonly
。我认为JSF只是通过不调用
setter
来模拟
readonly
所做的事情,但是您必须在JSF输入组件上指定它。是的,但是版本。它似乎在
inputText
中,但不在
inputHidden
中,尽管它可以正常工作。不调用setter正是我想要做的,但我不知道如果它不在这些文档中使用是否安全,它可能会被我弃用或没有在eg中实现。MyFaces@johnd但它确实适用于
readonly=true
。这太奇怪了。你找到什么了吗?这对mojarra有效的原因是
HiddenRender
扩展了
HtmlBasicRenderer
,这是处理
readonly
的地方。我没有脸,所以我不知道它在那里是否有效。此外,我可以看出这是如何滑入的,但不是文档的一部分。我使用的是BalusC建议的方法,但问题仍然存在:这个属性是用来运行的还是一个“好”bug?请重新阅读这个问题。警察早就知道了。OP已经用过了。OP只是问为什么它没有文档化,以及使用undocumented属性是否安全。