2012-06-07 25 views
1

我有一个<h:dataTable>在一列<h:commandLink><h:outputext><h:dataTable>以外,我需要通过命令链接呈现。如何通过ajax呈现数据表外的组件?

<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>移动到同一列内,那么它就起作用。

这是如何造成的,我该如何解决?

回答

4

,你目前有在<f:ajax render>不使用默认的NamingContainer分隔符:启动,因此相对于当前NamingContainer组件,它是在你的情况<h:dataTable>是客户端ID。所以它只会在outputtext组件也在同一个数据表中时才起作用。

您需要改用绝对客户端ID来引用outputtext组件。对于尚未记忆所有NamingContainer组件的初学者,找出它的最简单方法是检查网页浏览器中生成的HTML元素的id属性。通过<h:outputText id="output">在网页浏览器中打开页面,并做查看源并找到产生的<span>元素,正好利用这个ID和:前缀它,使其绝对的视图根。

E.g.

<span id="formId:output"> 

其中formId是任何<h:form>的ID为的outputText封闭在<h:form>的情况。如果您没有为<h:form>指定固定ID,则JSF将自动生成一个ID。你想指定一个固定的ID,然后像<h:form id="formId">

所以<f:ajax render>应该是这样的,然后

<f:ajax render=":formId:output" /> 
+0

由于BalusC,其工作pefertly。 :) – Roberto

+0

不客气。 – BalusC