使用相同的辅助bean将数据从page1传递到page2的最佳方法是什么?

我正在第1页和第2页创建一个简单的搜索表单,我将显示结果。

我想知道使用@ViewScoped支持bean的最佳方法是什么。 以前我必须使用@SessionScope来实现这一目标。

第1页 – 搜索页面:

 

Documents Search

第2页 – 结果页面:

 

@ViewScoped Backing Bean:

 @ManagedBean @ViewScoped public class DocumentBacking { private Document document = new Document(); private List results = new ArrayList(); public Document getDocument() { return document; } public void setDocument(Document document) { this.document = document; } public List getResults() { return results; } public void setResults(List results) { this.results = results; } public String search() { results = new ArrayList(); // dummy data Document doc = new Document(); doc.setMainNumber("1111"); doc.setSecNumber("2222"); doc.setFormType("OTHER"); doc.setSubFormType("TEST"); results.add(doc); doc = new Document(); doc.setMainNumber("1234"); doc.setSecNumber("4321"); doc.setFormType("SOMETHING"); doc.setSubFormType("TESTER"); results.add(doc); return "results.xhtml?faces-redirect=true"; } } 

使用自定义范围对您的代码更可靠。 以下是JSF 2.0自定义范围的示例。

我决定使用f:viewParamf:event type="preRenderView" 。 这样我就可以通过查询字符串params获得可collections的页面,并且我在preRenderView监听器的结果页面上生成结果。

我正在使用与我的问题相同的搜索页面。

结果页面:

          ...            

@ViewScoped Backing Bean:@ViewScoped公共类DocumentBacking {

 private Document document = new Document(); private List results = null; public Document getDocument() { return document; } public void setDocument(Document document) { this.document = document; } public List getResults() { return results; } public void setResults(List results) { this.results = results; } public void generateResults() { results = new ArrayList(); // dummy data Document doc = new Document(); doc.setMainNumber("9343"); doc.setSecNumber("71254"); doc.setFormType("OTHER FORMS"); doc.setSubFormType("CALGB"); results.add(doc); doc = new Document(); doc.setMainNumber("1234"); doc.setSecNumber("4321"); doc.setFormType("SOMETHING"); doc.setSubFormType("MAYO"); results.add(doc); } public String search() { return "results.xhtml?faces-redirect=true&includeViewParams=true"; } 

}