inputText上的呈现属性

时间:2010-07-12 15:39:35

标签: jsf

我有一个绑定到包含4个输入文本字段的辅助bean的搜索表单。我正在使用的设计表明用户应该能够看到搜索结果,但它们不应该是可编辑的。我决定使用rendered属性来显示托管bean为空的输入,如果不是则显示输出文本标记:

<t:inputText styleClass="inputText" id="name" rendered="#{not searchCriteria.fieldsEntered}"
value="#{searchCriteria.name}" autocomplete="off"></t:inputText>
<h:outputText value="#{searchCriteria.name}" rendered="#{searchCriteria.fieldsEntered}"></h:outputText>                                     

显示部分正常工作,但我注意到当输入的搜索字段超过1个时,只有第一个字段存储在托管bean中。

我从inputText中删除了一个渲染属性,这确实导致了我的问题。我可以推断出这里发生了什么,但我不明白为什么。

我相信在这种情况下,我将删除outputText标记并将渲染更改为禁用。我很好奇为什么我的初步计划不正确。

1 个答案:

答案 0 :(得分:2)

rendered="false"将导致输入元素未呈现,因此其值不会提交给服务器端。如果您使用的是请求范围的bean,则不会设置初始值。您希望将bean放在会话范围内,或者在h:inputHidden上添加h:outputText,将值传递给后续请求。

由于您已经在使用Tomahawk's t:inputText,我建议您使用其displayValueOnly属性而不是rendered属性和补充h:outputText

坚果:

<t:inputText displayValueOnly="#{searchCriteria.fieldsEntered}" ... />