我有两个页面 myaccount.xhtml 和 selectbank.xhtml
在我的帐户页面中,有一个充值帐户选项,当用户按下提交按钮时,用户将在其中输入金额,然后它将使用以下 bean 方法转到选择银行页面。
public String gotoPayMethod() {
FacesMessage doneMessage=new FacesMessage("Redirecting to Payment Type Page");
FacesContext.getCurrentInstance().addMessage(null, doneMessage);
return "SelectBank";
}
当用户转到选择银行时,用户必须提交付款方式,但在此页面中,它显示上一页中输入的金额为空。
两个页面都使用相同的 bean,并且 bean 的范围是请求范围。
那么如何在不通过 URL GET 方法传递该值的情况下访问该值呢?
只是为了让我满意,我使用了会话范围,然后它就可以工作了,但我知道这不是正确的方法,因为我开始对每个页面使用会话范围,那么它就不会高效。
谢谢
好吧,如果你的豆子是RequestScoped
比两个页面没有相同的 bean 更重要。这些 bean 会为每个请求重新创建,因此您应该传递参数。更改您的退货声明gotoPayMethod()
to:
return "SelectBank?faces-redirect=true&includeViewParams=true";
and on selectbank.xhtml
add:
<f:metadata>
<f:viewParam name="amount" value="#{bean.amount}" />
</f:metadata>
将此调整为您的属性和 bean 名称。
如果使用参数不是解决方案,您可以在会话中添加此参数,并在检索它时从第二个 bean 中的会话中将其删除:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("amount", amount);
((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().removeAttribute("amount");
删除属性的第二个构造是必要的,因为Map
从返回getSessionMap()
是不可变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)