我有一个jsf 1.2命令链接
<h:commandLink id="cars" action="${swapViewHandler.myFunction1}">
<h:commandLink id="ships" action="${swapViewHandler.myFunction2}">
myFunction1填充swapViewHandlerlistA中包含汽车,并导航到cars.xhtml
<navigation-rule>
<navigation-case>
<from-outcome>cars</from-outcome>
<to-view-id>cars.xhtml</to-view-id>
<redirect />
</navigation-case>
myFunction2填充同一个swapViewHandler。listA有船和导航到ships.xhtml
<navigation-rule>
<navigation-case>
<from-outcome>ships</from-outcome>
<to-view-id>hips.xhtml</to-view-id>
<redirect />
</navigation-case>
我需要处理一个用户刷新(F5),以便当刷新发生在myFunction1被调用并重新填充listA(使用cars)当ships.xhtml被刷新时,myFunction2被调用并重新填充listA(包含ships)
cars.xhtml和ships.xhtml有相同的backingbean (swapviewhandler)
并且它们都包含
<c:forEach id="tablePicList" items="${swapViewHandler.listA}" var="entity" varStatus ="status">
每个视图都应该有自己的支持bean。将bean放在请求范围中,并在它的(post)构造函数中完成工作。然后在每个新的GET请求上调用它。例如
public class CarHandler {
private List<Car> cars;
@EJB
private CarService carService;
@PostConstruct
public void init() {
cars = carService.list();
}
// ...
}
不要忘记将命令链接更改为普通输出链接。它也会给你额外的SEO点,因为它显然涉及纯页面到页面的导航和可书签/可刷新的GET请求。
<h:outputLink value="cars.jsf">cars</h:outputLink>
<h:outputLink value="ships.jsf">ships</h:outputLink>
如果列表依赖于某些请求参数或会话范围管理bean,那么您应该将其作为faces-config.xml
中的<managed-property>
注入到支持bean中。它将在@PostConstruct
方法中可用(但是在构造函数中而不是)。