如何渲染除一个inputText之外的所有Grid字段?

时间:2013-04-10 12:55:53

标签: ajax jsf rendering

我有一个使用ajax的搜索表单。在搜索字段keyup的{​​{1}}事件期间,我需要更新同一面板网格中的所有其他字段。

searchKeyFieldId

但是,当我使用<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"

然而,我有很多领域,确切地说,这个解决方案不是一个好习惯。

1 个答案:

答案 0 :(得分:3)

  

这个解决方案不是一个好习惯

抱歉,这太荒谬了。它完全符合您的要求,因此是正确的方法。让自己完成它并将它们全部输入。如果需要,您可以将样板隐藏在bean属性后面。

render="#{MyController.clientIdsToRender}"

如果需要,您可以根据JSF组件树自动填充字符串,但是为此编写代码将需要更多的字符来硬编码已在视图中定义的客户端ID。

标准JSF和RichFaces没有别的办法。然而,PrimeFaces提供了PrimeFaces Selectors(PFS)的替代品。另请参阅此相关问题:How to exclude child component in ajax update of a parent component?

完全不同的替代方案是将面板网格拆分为两个面板网格,一个包含搜索输入,另一个包含待更新字段。如有必要,你可以用好的CSS镜头对齐它们。