jsf - 如何将 bean 属性从一个 View 传递到另一个 View

标签 jsf parameter-passing managed-bean view-scope

我正在使用 JSF 2.1 和 Primefaces:

我有一个具有托管属性的 View 范围托管 bean 和一个在其他 View 范围托管 bean 上设置某些内容并转发到引用该托管 bean 的其他页面的方法:

@ManagedBean
@ViewScoped
public class HelloMB {

   @ManagedProperty("otherMB")
   private OtherMB other;

   public String changeOtherMB() {
      otherMB.setAnyObject(new Object());
      return "otherPage.xhtml";
   }

}

@ManagedBean
@ViewScoped
public class OtherMB {

   private Object o;    

   public void setAnyObject(Object o) {
      this.o = o;
   }

}

所以,当 otherPage 渲染时 o为空。

你知道我该如何解决这个问题吗?如何在 @ViewScoped 中保留对象托管 bean 并使其在其他页面上保持事件状态,而不使用 @SessionScoped

最佳答案

一旦导航到不同的 JSF View , View 范围就会被销毁并重新创建。您知道,只要您与同一个 JSF View 交互, View 作用域就存在。在这种特殊情况下,您在一个请求期间实际上会得到两个 #{otherMB} 托管 bean 实例。一个实例由源 View 使用,另一个实例由目标 View 使用。

由于第二个 View 是在同一个请求中创建的,因此您可以将其作为请求属性传递。

@ManagedBean
@ViewScoped
public class HelloMB implements Serializable {

    public String changeOtherMB() {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.getRequestMap().put("anyObject", anyObject);
        return "otherPage.xhtml";
    }

}
@ManagedBean
@ViewScoped
public class OtherMB {

    private Object anyObject;    

    @PostConstruct
    public void init() {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        this.anyObject = ec.getRequestMap().get("anyObject");
    }

}

但是我想知道您是否意识到幂等请求与非幂等请求的重要性。也许您实际上需要一个“普通”链接,而不需要调用 View 作用域 bean 操作方法。有关详细示例,请参阅下面最后一个“另请参阅”链接。

另请参阅:

关于jsf - 如何将 bean 属性从一个 View 传递到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21431195/

相关文章:

jsf - 使用 JSF 应用程序下载日志文件?

java - 从命令行加载 spring 上下文的属性

python - 为什么在函数中使用字符串解包后,输出中会出现逗号?

javafx - 传递参数JavaFX FXML

jsf - 为什么有不同的bean管理注解

jsf - Java单例类与JSF应用程序范围的托管bean - 区别?

java - 处理 'The EJB does not exist' 或 'Cannot load from BACKUPSTORE FOR Key'

ajax - 如何显示动态 Primefaces 组件的 ajaxstatus

linux - 由于字体的原因,Windows 和 Linux 上的网页布局有所不同

java - 如何在managedBean之间传递参数