我有一个绑定到包含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标记并将渲染更改为禁用。我很好奇为什么我的初步计划不正确。
答案 0 :(得分:2)
rendered="false"
将导致输入元素未呈现,因此其值不会提交给服务器端。如果您使用的是请求范围的bean,则不会设置初始值。您希望将bean放在会话范围内,或者在h:inputHidden
上添加h:outputText
,将值传递给后续请求。
由于您已经在使用Tomahawk's t:inputText
,我建议您使用其displayValueOnly
属性而不是rendered
属性和补充h:outputText
。
坚果:
<t:inputText displayValueOnly="#{searchCriteria.fieldsEntered}" ... />