gpt4 book ai didi

java - 如何在 jsf/a4j 中重新渲染动态 id(嵌套在 datalist 中)?

转载 作者:行者123 更新时间:2023-11-30 05:04:01 26 4
gpt4 key购买 nike

使用jsf 1.1.11/richfaces 3.1.5,并在一个页面上有一个包含多个表的facelet(列表驱动表全部存储在 map 中),每个表都有自己的排序/分页,在用户点击时触发ajax请求。 Bean 是请求范围的。页面结构的形式为:

<h:panelGroup id="allResults">
<t:dataList id="keysItr" var="groupType" value="#{bean.tableKeys}">
<t:dataList id="group" var="result" value="#{bean.groupResults[groupType].results}">
...table logic with sorting a4j commands
</t:dataList>
<h:panelGroup id="paginator">
... paginator logic from {bean.groupResults[groupType].paginator} with a4j commands
</h:panelGroup>
</t:dataList>
</h:panelGroup>

因此,如果我执行任何 a4j 命令并重新渲染 allResults,它将适用于该特定表,但当然也会重置所有其他表的分页器/排序行为(返回到第 1 页的默认值,未排序) - 我只想重新渲染受用户单击影响的特定表,但表分页器和 dataList id 是动态的,因为它们嵌套在keysItr dataList 中。

我编写了一些 javascript 和 a4j:jsfunction ,它将在页面加载时获取表/分页器的所有动态生成的键(因为它们只是 _container1:_containerN:rowIndexVar:id 的形式,因此很容易搜索它们)并将其扔到 session bean 中,并尝试将这些 id 值放入 a4j 操作的 reRender 属性中,但没有任何触发,所以不认为 a4j 允许 ids 完全符合 Naming_containers 和 reRender 属性上的所有内容?

不管怎样,只是想知道如果我已经知道 id 并且可以获取我想要的组件,是否有某种方法可以强制重新渲染支持 bean 中的特定表/分页器。我之前使用过一些代码,这些代码将从 facescontext viewRoot 递归地迭代子组件,以获取 id 引用的实际 UIComponent,但随后不知道下一步要做什么才能发生重新渲染。我可以采取任何想法或其他方法来使其发挥作用吗?谢谢。

最佳答案

richfaces生成的组件动态ID可以通过#{rich:clientId('id')}访问.

例如,假设您有

<h:form id="form">
< rich:dataTable id="table" >
..............
</rich:dataTable>
</h:form>

您可以使用#{rich:clientId('table')}在JSF页面中访问表的动态ID,会得到form:table在这个例子中。

然后,您可以在 a4j:command 中重新渲染此表。 :

<a4j:commandButton .... reRender="#{rich:clientId('table')}"/>

关于java - 如何在 jsf/a4j 中重新渲染动态 id(嵌套在 datalist 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5723989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com