2012-07-13 106 views
2

我對jsf非常陌生,我堅持使用ajax在updatig表中。JSF,AJAX,使用selectOneMenu更新動態表

我需要有一個表格可以在選擇菜單中工作,表格需要刷新onchange。 表的列取決於菜單值,每個值的列號可以不同。

我的代碼:

<h:form> 
     <h:selectOneMenu id="selectOneMenu" value="#{reservationGuestBean.currentPremiseId}" > 
      <f:selectItems value="#{reservationGuestBean.premiseNames}" var="p" itemLabel="#{p.label}" itemValue="#{p.value}" /> 
      <a4j:ajax event="change" listener="#{reservationGuestBean.premiseChanged}" ajaxSingle="true" render=":currentPremiseId, :reservationsHeading, :reservationsBody" /> 
     </h:selectOneMenu> 
    </h:form> 
    <div><h:outputText id="currentPremiseId" value="PremiseId: #{reservationGuestBean.currentPremiseId}" /></div> 
    <table id="reservationsTable"> 
     <tr> 
      <ui:repeat id="reservationsHeading" var="col" value="#{reservationGuestBean.reservationTableHeading}"> 
       <th>#{col}</th> 
      </ui:repeat> 
     </tr> 
     <ui:repeat id="reservationsBody" var="row" value="#{reservationGuestBean.reservationTableRows}"> 
      <tr> 
       <ui:repeat id="reservationsRowContent" var="cell" value="#{row}"> 
        <td>#{cell.value}</td> 
       </ui:repeat> 
      </tr> 
     </ui:repeat> 
    </table> 

隨着我能夠重新加載div的內容的代碼,但不表,既不標題也不內容。 在firebug中,我可以看到具有所需響應(xml)的更新請求,但所選表格元素不會更新。

回答

0

的快速和骯髒的答案僅僅是包裹在h:panelGroup你的表,並使用其ID上的a4j:ajax渲染標籤:

<h:panelGroup id="myTable"> 
    <table> 
    ... 
    </table> 
</h:panelGroup> 

說了這麼多,你可能想知道使用的組件h:datatable,而不是使用ui:repeat自己重複表格。

它很容易使用,它將成爲JSF視圖中一個有意義的組件,這個純HTML表格不是(這就是爲什麼你不能僅僅在ajax標籤中重新渲染它)。你可以從the examples in this article開始。