[英]JSF page only loads data when backing bean is on session scoped
这是我的admin_order_search.xhtml
页面,它有一个<p:dataTable>
,我正在尝试使用颗粒order
对象调用admin_view_order.xhtml
页面
<p:column>
<f:facet name="header">
<h:outputText value="View" />
</f:facet>
<p:commandButton action="admin_view_order?faces-redirect=true" id="view" value="View Info" update="dataTable" actionListener="#{viewOrderController.loadOrder(order)}" />
</p:column>
这是我的“ admin_view_order.xhtml”
<h:form id="orderViewForm">
<p:growl id="growl" showDetail="true" autoUpdate="true" sticky="false" />
<p:outputLabel value="#{viewOrderController.order.orderId}"></p:outputLabel>
<p:outputLabel value="#{viewOrderController.order.customerName}"> </p:outputLabel>
</h:form>
听到的是我的“ ViewOrderController.java”页面
@Component
@ManagedBean
@ViewScoped
public class ViewOrderController implements Serializable{
private static final long serialVersionUID = 1L;
private Order order;
public void loadOrder(Order order){
System.out.println("ID : "+order.getOrderId());
System.out.println("Name : "+order.getCustomerName());
this.order = order;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
问题是admin_view_order.xhtml
显示订单的详细信息,只有当我ViewOrderController
是@SessionScoped
,但我希望它是在ViewScoped
请让我知道该怎么做?
为什么要让Controller成为ViewScope?
离开视图后(导航至admin_view_order.xhtml),将使用控制器的新实例。 因此,您之前所做的更改(在loadOrder中设置顺序)已消失。
还有另一种方法,就是通过GET请求传递参数(例如,您可以将admin_order_search.xhtml中的order对象的id传递给,然后恢复该ID并通过搜索对象在后备bean中使用它与此ID)。
这可以通过使用视图参数来实现
1传递对象的ID(在按钮中添加以下标记)
<f:param name="id" value="#{viewOrderController.order.orderId}" />
2-之后,在您的admin_view_order.xhtml页面中,捕获视图参数并加载该订单的信息:
<f:metadata>
<f:viewParam name="id" value="#{viewOrderController.newOrderId}" />
<f:event type="preRenderView" listener="#{viewOrderController.loadOrder}"/>
</f:metadata>
请注意,我添加了一个属性(newOrderId)将order.orderId放入其中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.