2013-04-23 64 views
1

兩個@ViewScoped託管Bean之間的通信存在很大的問題。 以下列表顯示了我已完成此操作的方式。 UserAddEditMB被注入到UserSearchMB中,當用戶點擊帶有onAdd動作的按鈕後,它調用UserAddEditMB init方法。 最後有導航規則到我的第二種形式,但u1和u2都是空的。兩個@ViewScoped之間的JSF 2.0通信,注入

這是在兩個@ViewScoped託管的bean中執行通信的好方法嗎?

@ManagedBean 
@ViewScoped 
public class UserSearchMB { 

@ManagedProperty(value ="#{userAddEditMB}") 
private UserAddEditMB userAddEditMB; 

public void onAdd(){ 
    userAddEditMB.init(String param1, String param2); 
    return "userAddEdit"; 
} 
... 
} 


@ManagedBean 
@ViewScoped 
public class UserAddEditMB { 

private String u1; 
private String u2; 

public void init(String param1, String param2){ 
    this.u1 = param1; 
    this.u2 = param2; 
} 
.... 
} 
+1

的可能重複[注入一個視圖在另一個視圖範圍的bean作用域bean導致它被重新創建(http://stackoverflow.com/questions/14231044/injecting -one-view-scoped-bean-in-another-view-scoped-bean-causes-it-to-be-recre) – BalusC 2013-04-23 16:44:59

回答

-1

我作爲回答張貼,因爲評論太小。 你可以嘗試從UserAddEditMB得到UserSearchMB:

FacesContext context = FacesContext.getCurrentInstance(); 
UserSearchMB test= (UserSearchMB) context.getApplication().evaluateExpressionGet(context, "#{userSearchMB}", UserSearchMB .class); 
+0

請在作爲回答發佈之前先試驗自己。 – BalusC 2013-04-23 16:45:13

+0

是的,對不起,我應該發表評論:) – 2013-04-23 16:46:24