【发布时间】:2014-09-30 12:55:03
【问题描述】:
目前我有四个页面,每个页面都由它们自己的 RequestScoped 托管 bean 支持。这方面的一个例子如下......
支持 search.xhtml
@RequestScoped
SearchBean
支持结果.xhtml
@RequestScoped
ResultBean
支持detail.xhtml
@RequestScoped
DetailBean
支持action.xhtml
@RequestScoped
ActionBean
在每个页面(搜索页面除外)中,我从上一个页面注入 bean 以访问输入参数。比如……
@RequestScoped
public class Result {
@ManagedProperty("#{search}")
private Search search;
private ResultData resultData;
private Service service;
public Result() {
}
@PostConstruct
public void init() {
resultData = service.getResultData(search);
}
// getters & setters
}
@RequestScoped
public class Detail {
@ManagedProperty("#{result}")
private Result result;
private DetailData detailData;
private Service service;
public Detail() {
}
@PostConstruct
public void init() {
detailData = service.getDetailData(result);
}
// getters & setters
}
@RequestScoped
public class Action {
@ManagedProperty("#{detail}")
private Detail detail;
private ActionData actionData;
private Service service;
public Action() {
}
@PostConstruct
public void init() {
actionData = service.getActionData(detail);
}
// getters & setters
}
我想使用重定向,以便能够使用后退按钮,但是这样做时,我丢失了请求中托管 bean 的输入数据。我可以为每个 bean 使用 SessionScope,但我觉得我会滥用它。另外,当我到达操作页面时,我担心开销。此时,由于每个 bean 都注入了前一个 bean,所以在页面触发时会创建所有 4 个 ManagedBean。有没有比使用 RequestScoped bean 更好的方法。我想我可以为一系列页面使用一个 SessionScoped bean,并使用它来跨请求携带输入参数。这也将允许我使用重定向功能,并且在最终点击操作页面时不会加载所有四个托管 bean。任何建议,将不胜感激。谢谢。
【问题讨论】:
标签: jsf-2 managed-bean icefaces-3