我试图找到解决问题的datatable/ajax(简而言之):
<h:panelGroup layout="block" styleClass="ptl-body" id="toRender">
<h:dataTable value="#{flightMBean.flights}" var="f" id="flight_table" styleClass="table table-striped table-bordered">
<h:column>
<f:facet name="header">Airline</f:facet>
<h:outputText value="#{f.airline.name}"/>
</h:column>
...
<h:column>
<f:facet name="header">Status</f:facet>
<span class="label label-success">Approved </span>
<sec:authorize ifAnyGranted="ROLE_USER, ROLE_ADMIN">
<h:form>
<h:commandButton action="#{userMBean.observeFlight(f.id)}"
styleClass="btn purple" value="Observe">
<f:ajax execute="@form" />
</h:commandButton>
</h:form>
</sec:authorize>
</h:column>
</h:dataTable>
Paginator行动:
<h:form style="margin: 0 0 0 0">
<h:commandButton styleClass="btn"
action="#{flightMBean.previous()}"
rendered="#{flightMBean.paginator.hasPreviousPage}"
value="Prev">
<f:ajax render=":toRender"/>
</h:commandButton>
<h:commandButton styleClass="btn" action="#{flightMBean.next()}"
rendered="#{flightMBean.paginator.hasNextPage}"
value="Next">
<f:ajax render=":toRender"/>
</h:commandButton>
对于datatable的第一个视图页,一切似乎都在工作。当我点击"观察"时,带有良好id的航班进入数据库。当我点击"下一步"按钮时出现问题-数据表呈现新行,但每个id与第一页相同。
例如,在第一页我有航班:从x到y在20:00与id=1另一个与id=2,第二页呈现与第三航班与id=3。如果我想观察第一次或第二次飞行,一切都没问题!如果我想观察第三个,id=1的航班将进入数据库。
p。如果我只输入#{f。没有form/commandButton/jsf组件,一切看起来都很好…/
如果支持bean是请求作用域,并且在(后)构建期间没有完全保留相同的数据模型(<h:dataTable value>
背后的对象),则会发生这种情况。
要么将bean放在视图范围内,要么在bean的(post)构造函数中编写逻辑,以保持与将带有表的表单呈现给最终用户时完全相同的数据模型。如果它依赖于一些基于请求的条件,那么您可以使用<f:param>
在请求之间保留它们。
参见:
- commandButton/commandLink/ajax action/listener方法未被调用或输入值未更新-第4点