JSF,AJAX,使用selectOneMenu更新动态表

时间:2012-07-13 22:16:22

标签: java ajax jsf

我对jsf很新,我用ajax在updatig表中停留。

我需要有一个表与select菜单一起工作,表需要刷新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 with),但未更新选定的表元素。

1 个答案:

答案 0 :(得分:0)

快速而肮脏的答案就是将您的表格包裹在h:panelGroup中,并在a4j:ajax的呈现标记上使用其ID:

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

话虽如此,您可能希望学习使用组件h:datatable,而不是使用ui:repeat自行重新排序表。

它易于使用,并且它将是JSF视图中的一个有意义的组件,而纯HTML表不是(这就是为什么你不能只在ajax标签中重新渲染它)。您可以从the examples in this article开始。