Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jsf/a4j中重新提交动态id(嵌套在datalist中)?_Java_Ajax_Jsf_Facelets_Ajax4jsf - Fatal编程技术网

Java 如何在jsf/a4j中重新提交动态id(嵌套在datalist中)?

Java 如何在jsf/a4j中重新提交动态id(嵌套在datalist中)?,java,ajax,jsf,facelets,ajax4jsf,Java,Ajax,Jsf,Facelets,Ajax4jsf,使用jsf 1.1.11/richfaces 3.1.5,在一个页面上有一个包含多个表的facelet(驱动表的列表都存储在一个映射中),每个表都有自己的排序/分页功能,用户点击后就会发出ajax请求。Bean是请求作用域。页面结构的形式如下: <h:panelGroup id="allResults"> <t:dataList id="keysItr" var="groupType" value="#{bean.tableKeys}"> <

使用jsf 1.1.11/richfaces 3.1.5,在一个页面上有一个包含多个表的facelet(驱动表的列表都存储在一个映射中),每个表都有自己的排序/分页功能,用户点击后就会发出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命令的表格逻辑
... 使用a4j命令从{bean.groupResults[groupType].paginator}获取分页器逻辑
因此,如果我执行这些a4j命令中的任何一个并重新提交allResults,它将适用于该特定的表,但当然也会重置所有其他表的分页器/排序行为(返回到默认的第1页,未排序)-我只想重新提交受用户单击影响的特定表,但是表paginator和dataList id是动态的,因为它们嵌套在keysItr dataList中

我编写了一些javascript以及a4j:jsf函数,它将获取页面加载时表/分页器的所有动态生成键(因为它们的形式是_container1:_containerN:rowIndexVar:id,所以搜索它们很容易)并将其放入会话bean中,并尝试将这些id值放入a4j操作的reRender属性中,但没有触发任何操作,因此认为a4j不允许id使用命名容器和reRender属性上的所有内容完全限定


不管怎么说,我只是想知道如果我已经知道id并且可以获取我想要的组件,是否有某种方法可以强制在支持bean中重新加载特定的表/分页器。我以前使用过一些代码,这些代码将从facescontext viewRoot递归地遍历子组件,以获得id引用的实际UIComponent,但不知道接下来要做什么才能实现重新渲染。我有什么想法或其他方法可以让这一切顺利进行吗?谢谢。

由richfaces生成的组件的动态ID可以被
{rich:clientId('ID')}
访问

例如,假设您有

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


..............
您可以在JSF页面中使用
#{rich:clientId('table')}
来访问表的动态ID,在本例中,它将获得
表单:table

然后,您可以在
a4j:command
中重新加载此表:


你好,肯,是的,我以前遇到过这个问题,但我认为直到RF的更高版本(我得到了一个丰富的函数:clientId not found err)才引入它-我们正在使用3.1.5,因为我们仍然使用jsf 1.1,还没有迁移到1.2.Hi James,我找到了这个链接
http://illegalargumentexception.blogspot.com/2009/02/jsf-working-with-component-ids.html
讨论了如何通过实现TLD函数来获取这些生成的ID,就像
rich:clientId
所做的一样。我没有亲自尝试,但它可能对您有用