我对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),但未更新选定的表元素。
答案 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开始。