【问题标题】:JSF2.0 Passing parameters to another BeanJSF2.0 将参数传递给另一个 Bean
【发布时间】:2012-07-01 11:19:54
【问题描述】:

当我将操作方法​​中的参数发送到另一个页面时,我无法从第二个类中读取它们。

page1.xhtml:

....
<h:commandLink action="#{mbean1.gotoMessageDetail(msg)}" value="#{msg.caption}"/>
....

托管 bean1

@ManagedBean(name = "mbean1")
@RequestScoped
public class MBean1 {
 ....
 public String gotoMessageDetail(Message msg) {
    //do some work
    retrun "page2.xhtml?param1=val1&param2=val2";
  }
}

在第二类 MBean2 中,我尝试使用以下代码块获取参数,但无法获取发送的参数。

@ManagedBean(name = "mbean2")
@ViewScoped
public class MBean2{
   ...
  HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
  param1=Long.parseLong(request.getParameter("param1")==null ? "0" : request.getParameter("param1"));
  param2=Long.parseLong(request.getParameter("param2")==null ? "0" : request.getParameter("param2"));
}

param1 和 param2 为空。如何从 mbean1 的 action 方法中获取 param1 和 param2。

【问题讨论】:

    标签: jsf-2 managed-bean


    【解决方案1】:

    会不会是这个错字retrun?编辑并重试。

    @ManagedBean(name = "mbean1")
    @RequestScoped
    public class MBean1 {
     ....
     public String gotoMessageDetail(Message msg) {
        //do some work
        return "page2.xhtml?param1=val1&param2=val2";
        /////retrun to return
      }
    }
    

    为了您的信息,您可以使用@ManagedProperty 注释将属性从一个 ManagedBean 注入到另一个。拥有另一个 ManagedBean 的属性意味着您不需要传递任何参数。

    看看Injecting Managed beans in JSF 2.0

    【讨论】:

    • 感谢您的评论。但 retrun 只是这里的类型错误。据我所知,@ManagedProperty 适用于 sessionscoped bean。但我的 bean 是 requestscopd 和 viewscoped。
    • @Mustafa: @ManagedProperty 注释注入任何范围的 bean,只要此托管属性 bean 的范围高于或等于托管 bean。
    猜你喜欢
    • 2012-09-25
    • 2020-10-03
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多