我正在尝试更新UI重复中的元素,但遗憾的是我还没有发现如何从dataTable中正确地处理outputPanel。我知道这个问题来自不同的命名容器,但是,我希望有一个解决方案。
<h:body>
<h:form id="form">
<ui:repeat var="_entry" value="#{test.entries}">
<p:outputPanel id="counterPanel">
<h:outputText value="#{test.counter}" />
</p:outputPanel>
<p:dataTable var="_p" id="paramTable" value="#{_entry.params}">
<p:column headerText="Options">
<p:commandLink value="Update" update="counterPanel" />
</p:column>
</p:dataTable>
</ui:repeat>
</h:form>
</h:body>
上面的代码示例引发了以下异常:
javax.servlet.ServletException: Cannot find component with identifier "counterPanel" in view.
THX, 雅各布
答案 0 :(得分:5)
两种方式:
您需要为<ui:repeat>
提供一个客户端ID,以便您可以通过绝对客户端ID路径引用它:
<h:form id="form">
<ui:repeat id="entries" var="_entry" value="#{test.entries}">
<p:outputPanel id="counterPanel">
<h:outputText value="#{test.counter}" />
</p:outputPanel>
<p:dataTable var="_p" id="paramTable" value="#{_entry.params}">
<p:column headerText="Options">
<p:commandLink value="Update" update=":form:entries:counterPanel" />
</p:column>
</p:dataTable>
</ui:repeat>
</h:form>
将<h:form>
移到外部循环内,以便您可以使用@form
:
<ui:repeat var="_entry" value="#{test.entries}">
<h:form id="form">
<p:outputPanel id="counterPanel">
<h:outputText value="#{test.counter}" />
</p:outputPanel>
<p:dataTable var="_p" id="paramTable" value="#{_entry.params}">
<p:column headerText="Options">
<p:commandLink value="Update" update="@form" />
</p:column>
</p:dataTable>
</h:form>
</ui:repeat>