如何通过ajax在数据表外部渲染组件?

时间:2012-06-07 16:31:46

标签: ajax jsf-2 datatable

我的<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>,那么它可以正常工作。

这是如何引起的?如何解决?

1 个答案:

答案 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>