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

med*_*pal 3 jsf servlets

我们在我们的项目中使用JSF(我很新),每个页面都有一个后端bean Java文件.

为了从一个页面移动(重定向)到另一个页面,我需要在重定向之前将所有参数(搜索条件)放在请求范围中,然后在下一个页面构造函数中将其检索回来.如果你的页面很少,并且想要回到顶部,那么维护它会变得非常烦人.

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

这个方法究竟是什么问题,并且在JSF中有更好的方法吗?

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

Bal*_*usC 5

如果要在多个窗口/选项卡中打开相同的页面,将请求范围的数据放在会话范围中将会非常困难.如果数据本身也是真正的会话作用域,那么只使用会话范围(优秀的例子是"登录用户"和"购物车",你希望它在整个会话中完全相同).同样,不要将请求范围的数据放在会话范围中.它伤害了你和最终用户.

只需设计你的bean聪明(让不同的bean包含相同的数据是没有意义的)并h:inputHidden在必要时使用,如果需要与托管属性注入结合使用.编码和维护确实有点痛苦.另一方面,如果要传递的数据实际上与"整个"托管bean一样大,那么你也可以抓住Tomahawk <t:saveState>.它在JSF页面中只需要一行,并且一直都很有帮助.

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

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

这种方法没有错.也许你用错误的方式对它进行了编码,导致它看起来不必要地过于复杂.只要您不发布有关所用代码的详细信息,我就说不出多少.

根据您的编辑:

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

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