jsf - 在页面之间发送参数的最佳方式是什么?

标签 jsf servlets

我们在我们的项目中使用 JSF(我对它还很陌生)每个页面都有一个 back bean Java 文件。

为了从一个页面移动(重定向)到另一个页面,我需要在重定向之前将所有参数(搜索条件)放入请求范围,然后在下一个页面构造函数中检索它。当你只有几页深并且你想回到顶部时,维护起来真的很烦人。

例如,如果我的第 1 页带有高级搜索过滤器,它会重定向到第 2 页,具体取决于所选项目,并且从第 2 页开始,您会得到另一个列表,您可以转到第 3 页了解详细信息。现在每次我需要将所有参数放入请求范围/再次读取它们时,将它们存储在隐藏字段中并取回它们。

这种方法到底有什么问题,在 JSF 中有什么更好的方法吗?

编辑:环境是 IBM Rational Application Developer (RAD),它有自己的 JSF 实现。不确定这是否有所作为。

最佳答案

如果您要在多个窗口/选项卡中打开同一页面,那么将请求范围内的数据放在 session 范围内会(非常)困难。仅当数据本身也是真正 session 范围时才使用 session 范围(很好的例子是“登录用户”和“购物车”,您希望它在整个过程中完全相同 session )。同样,不要将请求范围内的数据放在 session 范围内。这会伤害您和最终用户。

只需巧妙地设计您的 bean(让不同的 bean 包含相同的数据是没有意义的)并利用 h:inputHidden在需要的地方,如有必要,结合托管属性注入(inject)。编码和维护确实有点痛苦。另一方面,您也可以捕获 Tomahawk <t:saveState>如果要传递的数据实际上与“整个”托管 bean 一样大。它在 JSF 页面中仅占用一行,并且一直提供很大的帮助。

*For example, if i have page 1 with advanced search filters, which redirects to page 2, depending on the chosen item, and from page 2, you get another list were you can go to page 3 for details. Now each time i need to put all the params in the request scope/read them again, store them in hidden fields and get them back.

Whats exactly wrong with this method and whats a better way to do it in JSF?*

这个方法没有问题。也许您以错误的方式编码,导致它看起来不必要地过于复杂。只要您不发布有关所用代码的详细信息,我就不能说太多。

根据您的修改:

EDIT: the environment is IBM Rational Application Developer (RAD), which have its own JSF implementation. Not sure if that makes a difference.

这不是真的。 IBM 没有任何 JSF 实现。它只有一个组件库(维护不善的 hx 前缀组件,也称为“Faces Client Framework”)。 WSAD/RAD 作为标准 JSF 实现随 Sun JSF RI (Mojarra) 一起提供,尽管它通常是一个严重过时的版本。确保您保持更新。

关于jsf - 在页面之间发送参数的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361616/

相关文章:

java - web.xml 上的 servlet 条目中的 load_on_startup 的可能值是什么?

java - 带有 Java Server Faces 的 HTTPS

jsf - 如果我尝试删除它,为什么 JPA 的行为就像我的实体已分离,但如果我编辑它却不是?

java - JSF 中的 "for"循环

jsf - 如何在 PrimeFaces Accordion 面板中打开所有动态加载的选项卡

java - Tomcat错误页面问题

java - tomcat 上动态 URL 重写的性能方式

java - 可用的 Servlet 3.0 实现?

javascript - Javascript有页面转发和页面重定向的区别吗?

java - Servlet 和 JSP 中页面范围和请求范围的区别?