我的<h:dataTable>
列中包含<h:commandLink>
,<h:outputext>
位于<h:dataTable>
之外,我需要通过命令链接呈现。{/ p>
<h:form>
<h:dataTable value="#{userControl.lista}" var="c">
<h:column>
<f:facet name="header" >
<h:outputText styleClass="leftColumn" value="Nombre"/>
</f:facet>
#{c.nombre}
</h:column>
<h:column>
<f:facet name="header" >
Usuario
</f:facet>
<h:commandLink actionListener="#{userControl.setAdmin_user(c.user)}" value="#{c.user}">
<f:ajax render="output" />
</h:commandLink>
</h:column>
</h:dataTable>
<h:outputText id="output" value="#{userControl.admin_user}"/>
</h:form>
它不起作用。如果我在同一列中移动<h:outputText>
,那么它可以正常工作。
这是如何引起的?如何解决?
答案 0 :(得分:4)
<f:ajax render>
中您当前拥有的客户端ID不以默认的NamingContainer
分隔符:
开头,因此相对于当前 { {1}}组件,在您的情况下为NamingContainer
。因此,只有当outputtext组件也在同一个数据表中时才会起作用。
您需要使用绝对客户端ID来引用outputtext组件。对于尚未记住所有<h:dataTable>
组件的初学者,找到它的最简单方法是检查webbrowser中生成的HTML元素的NamingContainer
属性。在webbrowser中打开页面并执行查看源并找到由id
生成的<span>
元素并准确获取此ID并在其前面添加<h:outputText id="output">
以使其成为< em>绝对到视图根目录。
E.g。
:
其中<span id="formId:output">
是formId
的ID,对于这种情况,outputtext包含在<h:form>
中。如果您没有为<h:form>
指定固定ID,则JSF将自动生成一个。您想指定一个固定ID,然后指定<h:form>
。
所以<h:form id="formId">
应该是这样的
<f:ajax render>