从视图范围的托管 bean JSF 填充数据表
Posted
技术标签:
【中文标题】从视图范围的托管 bean JSF 填充数据表【英文标题】:populate Data Table from View scoped managed bean JSF 【发布时间】:2013-01-15 03:46:08 【问题描述】:您好,我有负责搜索活动的 View 范围 bean。用户输入搜索条件和搜索值后,点击搜索按钮,它会使用搜索结果填充其列表类型属性之一,然后导航到另一个页面,其搜索结果显示在数据表中,该数据表绑定到即将包含的列表搜索结果。但是每当用户搜索并重新加载新页面以显示搜索结果时,都会初始化新的 View 范围 bean。因此它无法显示具有预期搜索结果的数据表。我已经阅读了一些关于此的问题和文章,它被称为因为视图范围的 bean 被初始化到新页面的每个请求。如何解决这个问题。我将该结果列表绑定到 beans(view scoped) List 属性,因为在该列表中我想要搜索结果。
【问题讨论】:
【参考方案1】:您正在执行不是idempotent/bookmarkable 的POST 搜索。像 Google 一样,使用 GET 而不是 POST。 <f:viewParam>
在这方面非常有帮助。这是一个启动示例:
<f:metadata>
<f:viewParam id="query" name="query" value="#bean.query" />
<f:event type="preRenderView" listener="#bean.search" />
</f:metadata>
...
<form>
<label for="query">Query</label>
<input type="text" name="query" value="#param.query" />
<input type="submit" value="Search" />
<h:message for="query" />
</form>
...
<h:dataTable value="#bean.results" var="result" rendered="#not empty bean.results">
...
</h:dataTable>
基本上有了这个@RequestScoped
bean:
private String query;
private List<Result> results;
public void search()
results = service.search(query);
提交表单时,您最终会在 URL 中获取搜索查询字符串,使其具有幂等性/可书签性。刷新请求最终会得到完全相同的结果。
【讨论】:
以上是关于从视图范围的托管 bean JSF 填充数据表的主要内容,如果未能解决你的问题,请参考以下文章