java - JSF 2 - 存在哪些方法可以返回到调用页面?

标签 java jsf-2 navigation

我的 Web 应用程序有两个搜索页面 - search1.jsf 和 search2.jsf - 它们共享同一个 bean,后者又调用结果页面 - result.jsf。

所以两个搜索页面都有一个commandButton

 <h:commandButton value="Commit" action="#{search.commit}" />

“搜索”bean 然后使用

处理搜索并转发到结果页面
target = "result?faces-redirect=true";

现在 result.jsf 不知道使用了哪个搜索页面。如何传递调用页面,以便被调用页面能够呈现返回调用页面的链接?

使用浏览器后退按钮(或 Javascript 代码)返回历史记录的缺点是,用户在浏览结果后,只会返回结果中的一页,而不是“向上”搜索参数形式。

目前我看到的选项是:

  • 使用 <f:param> 通过链将调用者页面名称传递到结果页面或 action="#{search.commit(name_of_calling_page)}

  • 将所有“搜索参数”表单放在一个 JSF 页面中并有条件地切换内容

或者是否有返回调用 JSF 页面名称的 JSF 函数?

最佳答案

您正在重定向到结果页面,这表明您正在使用 session 范围内的 bean 来保存结果(范围内的请求/ View 根本无法在重定向后继续存在)。忽略这是一种糟糕/奇怪的方法这一事实,您也可以将搜索类型也存储在该 bean 中吗?

无论如何,最简单和最干净的方法是使用单个主视图和单个主视图作用域 bean 并有条件地显示 search1.xhtml , search2.xhtmlresults.xhtml使用 <ui:include>在主视图中。

search.xhtml

<ui:fragment rendered="#{empty search.results}">
    <ui:include src="/WEB-INF/search#{search.type}.xhtml" />
</ui:fragment>
<ui:fragment rendered="#{not empty search.results}">
    <ui:include src="/WEB-INF/results.xhtml" />
</ui:fragment>

只要你回voidnull在操作方法中,相同的 View 范围 bean 将保留在每个后续(和非重定向!)请求中。如果您打算使其成为 GET 而不是 POST(这样它就可以添加书签和后退按钮导航,例如 Google),那么您实际上应该更改表单和 View 参数,使其成为 GET 而不是 POST。

关于java - JSF 2 - 存在哪些方法可以返回到调用页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594801/

相关文章:

php - 使用 MySQL 和 session 登录

java - 如何从 doc 或 pdf 文件中读取特定页面。

java - 服务器关闭时远程启动 GlassFish v3

jsf - 如果 f :viewParam/converter returns null?,如何将某人发送到 404 页面

java - 使用 CDI(上下文和依赖注入(inject))支持 bean 而不是托管 bean

jsf-2 - 如何使用 j_security_check jsf

javascript - 当前菜单项

Java CardLayout 不显示

java - 空指针异常错误,我们又见面了

c# - 导航 UWP-navigateuri : msnweather