2012-06-07 51 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