如何呈现除一个inputText之外的所有网格字段?
问题描述:
我有一个使用ajax的搜索表单。在搜索字段searchKeyFieldId
的keyup
事件期间,我需要更新同一面板网格中的所有其他字段。如何呈现除一个inputText之外的所有网格字段?
<h:panelGrid id="myGrid" columns="4" >
<!-- When searchKeyFieldId change ... -->
<!-- Need to render all the myGrid EXCEPT searchKeyFieldId -->
<h:outputText value="search key"/>
<h:inputText id="searchKeyFieldId"
value="#{MyController.searchKeyField}"
valueChangeListener="#{MyController.licenseNumberChange}" >
<a4j:ajax event="keyup" render="myGrid" />
</h:inputText>
<h:outputText value=""/>
<h:outputText value=""/>
<!-- Target render fields -->
<h:outputText value="text1"/>
<h:inputText id="field1"
value="#{MyController.field1}"/>
<h:outputText value="text2"/>
<h:inputText id="field2"
value="#{MyController.field2}"/>
<h:outputText value="text3"/>
<h:inputText id="field3"
value="#{MyController.field3}"/>
.....
</h:panelGrid>
然而,当我使用render="myGrid"
,然后在搜索领域也被更新,因此失去焦点。最终用户必须再次单击/聚焦输入字段以继续输入。
所以,我需要如下更新只有特定的字段:
<a4j:ajax event="keyup" render="field1 field2 field3 field4 field5 ..." />
不过,我有很多领域,40准确地说,这种解决方案不会是一个很好的做法。
答
该解决方案将不会是一个很好的做法
抱歉,这是荒谬的。它完全是你想要的工作,因此是正确的方法。让自己完成并将其全部输入。如有必要,您可以将样板隐藏在bean属性后面。
render="#{MyController.clientIdsToRender}"
必要时,可以自动填充基于JSF组件树的字符串,但是写的代码,将需要更多的字符超过必要硬编码在视图中已经definied的客户端ID。
标准JSF和RichFaces中没有其他方法。然而,PrimeFaces提供了PrimeFaces Selectors(PFS)的替代品。另请参阅此相关问题:How to exclude child component in ajax update of a parent component?
完全不同的替代方法是将面板网格分为两个面板网格,一个面板网格包含搜索输入,另一个网格包含要更新的字段。如有必要,您可以将它们与CSS的良好镜头对齐。
谢谢。你非常有帮助@BalusC – 2013-04-18 08:30:05