gpt4 book ai didi

jsf - 在 @ViewScoped bean 之间传递对象而不使用 GET 参数

转载 作者:行者123 更新时间:2023-12-03 14:34:37 26 4
gpt4 key购买 nike

我有一个 browse.xhtml我在哪里浏览 cars 的列表我想在 details.xhtml 中查看汽车的详细信息当按下“查看更多”按钮时。他们的支持 bean 是@ViewScoped并被称为 BrowseBeanDetailsBean , 分别。

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

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

最佳答案

取决于您是发送重定向还是仅仅导航。

如果您要发送重定向,请将其放入 flash 范围内:

Faces.setFlashAttribute("car", car);

这在 @PostConstruct 中可用下一个 bean 为:
Car car = Faces.getFlashAttribute("car");

或者,如果您只是导航,则将其放在请求范围内:
Faces.setRequestAttribute("car", car);

这在 @PostConstruct 中可用下一个 bean 为:
Car car = Faces.getRequestAttribute("car");

也可以看看:
  • Injecting one view scoped bean in another view scoped bean causes it to be recreated
  • How to pass objects from one page to another page in JSF without writing a converter

  • 请注意,我假设您非常清楚拥有两个完全独立的 View 的设计选择,如果没有另一个 View ,它们就不能存在(幂等),而不是拥有例如具有条件渲染内容的单个 View 。并且您已经知道 View 在实际被幂等请求时应该如何表现(即通过书签、共享链接、搜索机器人等)。如果没有,那么我强烈建议您仔细阅读这个问题的答案: How to navigate in JSF? How to make URL reflect current page (and not previous one) .

    更新:如果您不使用 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");

    关于jsf - 在 @ViewScoped bean 之间传递对象而不使用 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694423/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com