猿问

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

我有一个browse.xhtml浏览列表的位置cars,我想在details.xhtml按下“查看更多”按钮时查看汽车的详细信息。它们的支持bean分别@ViewScoped称为BrowseBean和DetailsBean。


现在,我不希望用户/客户端在URL中看到汽车ID,所以我想避免使用GET参数,如此处和此处所示。


有什么办法可以做到这一点?我将Mojarra 2.2.8和PrimeFaces 5和OmniFaces 1.8.1一起使用。


慕慕森
浏览 400回答 3
3回答

宝慕林4294392

取决于您是发送重定向还是仅浏览。如果要发送重定向,则将其放入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");

慕婉清6462132

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

弑天下

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

相关分类

Java
我要回答