Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
在JSTL c:forEach中设置JSF组件的ID会导致重复ID异常_Jsf_Primefaces_Datatable_Jstl - Fatal编程技术网

在JSTL c:forEach中设置JSF组件的ID会导致重复ID异常

在JSTL c:forEach中设置JSF组件的ID会导致重复ID异常,jsf,primefaces,datatable,jstl,Jsf,Primefaces,Datatable,Jstl,我得到了一个primefaces树表,并额外使用c:forEach来创建动态列。 有没有办法从另一个表单中识别c:forEach中的那些列? (如果我在c:forEach中为我的列设置了一个id,我会得到一个重复的id错误) 如果我在c:forEach中为我的列设置了一个id,我会得到一个重复的id错误\ 这是因为在JSF组件树中实际生成了多个JSF组件,而不是在生成HTML输出时重复使用多次的一个组件。请参阅,以获取有关工作原理的详细说明 在这种情况下,您自己负责在这些JSF组件上设置唯

我得到了一个primefaces树表,并额外使用c:forEach来创建动态列。 有没有办法从另一个表单中识别c:forEach中的那些列? (如果我在c:forEach中为我的列设置了一个id,我会得到一个重复的id错误)


如果我在c:forEach中为我的列设置了一个id,我会得到一个重复的id错误\

这是因为
在JSF组件树中实际生成了多个JSF组件,而不是在生成HTML输出时重复使用多次的一个组件。请参阅,以获取有关工作原理的详细说明

在这种情况下,您自己负责在这些JSF组件上设置唯一的ID。您可以使用当前迭代索引来进行此操作

<c:forEach ... varStatus="loop">
    <p:commandLink id="link_#{loop.index}" ...>


谢谢你,巴卢斯克。有趣的是,如何在不同的表单中获取loop.index并使用该循环索引向该列发送更新请求?在这种情况下,JSTL循环索引不是问题所在,它应该可以很好地工作,因为这在两个JSF组件树中都存在(
UIViewRoot#findComponent()
能够返回正确的内容)以及在HTML DOM树中(
document.getElementById()
能够准确地在该客户机ID上找到正确的内容)。但是,在这种情况下,问题在于
自身的索引(
:0
:1
等前缀)。这在JSF组件树中不存在。所以你仍然需要更新整个
东西(或者用另一个
..:X)嗯,我想我理解你的意思。如果我必须更新整个树表,我将不得不缓存或存储哪些节点在哪里扩展,哪些没有。我认为这对我来说是一个很大的工作;-)问题已解决;-)。我只是在我的TreeHandler bean中添加了一个TreeNodes列表,我在其中存储了那些扩展的节点。在更新整个树的过程中,我只检查列表,如果它包含我的节点,如果为true,我设置expanded=true,否则不检查。
<c:forEach ... varStatus="loop">
    <p:commandLink id="link_#{loop.index}" ...>