为了账号安全,请及时绑定邮箱和手机立即绑定

在不使用GET参数的情况下在@ViewScoped bean之间传递对象

在不使用GET参数的情况下在@ViewScoped bean之间传递对象

慕慕森 2019-09-24 15:01:13
我有一个browse.xhtml浏览列表的位置cars,我想在details.xhtml按下“查看更多”按钮时查看汽车的详细信息。它们的支持bean分别@ViewScoped称为BrowseBean和DetailsBean。现在,我不希望用户/客户端在URL中看到汽车ID,所以我想避免使用GET参数,如此处和此处所示。有什么办法可以做到这一点?我将Mojarra 2.2.8和PrimeFaces 5和OmniFaces 1.8.1一起使用。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

取决于您是发送重定向还是仅浏览。


如果要发送重定向,则将其放入Flash作用域中:


Faces.setFlashAttribute("car", car);

@PostConstruct在下一个bean的中可用:


Car car = Faces.getFlashAttribute("car");

或者,如果您只是在导航,则将其放在请求范围内:


Faces.setRequestAttribute("car", car);

@PostConstruct在下一个bean的中可用:


Car car = Faces.getRequestAttribute("car");

也可以看看:

将一个视图范围的bean注入另一个视图范围的bean会使它重新创建

如何在JSF中将对象从一页传递到另一页而无需编写转换器

请注意,我假设您非常了解这样的设计选择:拥有两个完全独立的视图,而没有另一个视图就无法存在(等幂),而不是例如使用具有条件渲染内容的单个视图。而且,您已经知道视图在实际上被幂等请求时(例如,通过书签,共享链接,搜索机器人等)应该如何表现。如果没有,那么我强烈建议您仔细阅读以下问题的答案:如何在JSF中导航?如何使URL反映当前页面(而不是上一页)。


更新:如果您不使用OmniFaces,请分别使用以下各项:


FacesContext.getCurrentInstance().getExternalContext().getFlash().put("car", car);

Car car = (Car) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("car");

FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("car", car);

Car car = (Car) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("car");


查看完整回答
反对 回复 2019-09-24
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

事情是,我还没有成功地安装Primefaces,据报道在这里,所以我下载primefaces-5.0.jar到WEB-INF/lib的文件夹。我可能搞砸了我的配置,这确实是第一次使用所有这些工具并使用Java EE。

查看完整回答
反对 回复 2019-09-24
?
弑天下

TA贡献1818条经验 获得超8个赞

在运行时类路径中缺少OmniFaces。显然,Maven构建因某种原因失败了。OmniFaces必须(与PrimeFaces一样)最终位于/WEB-INF/lib构建文件夹中。默认范围(编译)应该可以正常工作。

查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 399 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信