我有这个数据表:
<h:dataTable value="#{orderController.orderList}" var="order"
styleClass="table table-striped">
<h:column>
<f:facet name="header">#</f:facet>
<h:outputText value="#{order.orderNo}" escape="false"/>
</h:column>
<h:column>
<f:facet name="header">Cliente</f:facet>
<h:outputText value="#{order.client}" escape="false"/>
</h:column>
<h:column>
<f:facet name="header">Data</f:facet>
<h:outputText value="#{order.date}" escape="false"/>
</h:column>
<h:column>
<f:facet name="header">Status</f:facet>
<h:outputText value="#{order.status}" escape="false"/>
</h:column>
<h:column>
<f:facet name="header"></f:facet>
<h:form>
<h:commandButton action="#{orderController.orderDetail}" value="Detalhe" styleClass="btn btn-info"/>
</h:form>
</h:column>
</h:dataTable>
我正在显示订单列表,每个列表都有一个“详细信息”按钮,该按钮会将用户重定向到orderDetail.html
内的views/fornecedores
页面。
我已经调试了,当我点击commandButton
时,它没有调用我的bean函数。[
我也试过这个:<h:commandButton action="views/fornecedores/orderDetail.html" value="Detalhe" styleClass="btn btn-info"/>
而且没有,它会一直将我重定向到同一页orderSearch.html
。
我需要的是调用将接收orderNo
参数的方法并加载对象并重定向到orderDetail.html
页。
我做错了什么或采用这种方法的最佳方法是什么?
答案 0 :(得分:7)
在这种特殊情况下,当您嵌套在HTML中非法的表单时,可能会发生这种情况。当#{orderController}
是请求作用域且orderList
内容依赖于基于请求的值时,也会发生这种情况,该值导致在处理表单提交时列表不兼容地更改。
因此,请确保您没有将多个<h:form>
组件相互嵌套,并确保#{orderController}
是@ViewScoped
bean并且您没有操纵{ {1}}在其getter方法中。
至于您的具体功能要求,orderList
<h:link>
和<f:param>
对此更为明智。它的书签和更多SEO友好。另请参阅Communication in JSF 2.0 - Processing GET request parameters。