我有两个不同的页面。在第一页中,我在ViewScoped Bean中有一个Map,在第二页中有另一个ViewScoped Bean,它需要第一页中的Map。如何在两个页面之间传递Map?
我曾想过将Map转换为JSON字符串并传递<f:viewParams>
,但这可能会使该网址过长。
任何想法都将受到赞赏!
答案 0 :(得分:3)
鉴于第二页是由PRG请求打开的,最好的办法是使用闪存范围。您可以在ExternalContext#getFlash()
的地图中将闪存范围属性放在地图中,您可以通过同一ExternalContext#getFlash()
地图(EL范围也由#{flash}
提供,在下一个请求中获取它们)。
所以,例如这应该做:在第一页的支持bean的动作方法中:
public String submit() {
// ...
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.getFlash().put("data", data);
return "page2?faces-redirect=true";
}
然后是第二页(第2页)的支持bean的属性:
@ManagedProperty("#{flash.data}")
private Map<String, String> data; // Setter required.
或者,或者,第二页的支持bean的postconstruct:
private Map<String, String> data;
@PostConstruct
public void init() {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
data = (Map<String, String>) ec.getFlash().get("data");
}