簡體   English   中英

修改從另一個托管Bean作為托管屬性訪問的托管Bean的私有對象屬性

[英]Modifying a private object property of a managed bean accessed as a managed property from another managed bean

嘗試向我們的JSF 2應用程序添加功能以列出活動用戶(具有活動會話的用戶),為此,我決定使用應用程序范圍的托管bean並存儲用戶列表,並在成功登錄時添加每個用戶。 然后,我將從jsf頁面訪問活動用戶列表(存儲在應用程序范圍的托管Bean上)-僅在我能弄清楚如何解決以下問題時:

應用程序范圍的bean:AppBean.java

@ManagedBean(name = "appBean")
@ApplicationScoped
public class AppBean implements java.io.Serializable {

    private List<User> connectedUsers = new ArrayList<User>();

    public AppBean() {
    }

    public List<User> getConnectedUsers() {
        return connectedUsers;
    }

    public void setConnectedUsers(List<User> connectedUsers) {
        this.connectedUsers = connectedUsers;
    }  
}

登錄Bean:

@Named(value = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {

    @ManagedProperty("#{appBean}")
    private AppBean appBean;

    private User userInSession;

    public LoginBean() {
    }

    public String authenticate() {
        if (this.authClearsOut()) {
            if (appBean != null)
                appBean.getConnectedUsers().add(userInSession);
            else System.out.println("appBean = null !!!!");
            return "/next_screen.xhtml?redirect=true";
        }
        else return "/login.xhtml?authentication=failed";
    }

    public AppBean getAppBean() {
        return appBean;
    }

    public void setAppBean(AppBean appBean) {
        this.appBean = appBean;
    }
}

現在這里有兩個問題:1)除非我將LoginBean.java的第6行更改為私有AppBean,否則appBean為null appBean = new AppBean(); 2)用戶userinSession永遠不會添加到(List)connectedUsers中。

怎么了

JSF @ManagedProperty批注僅在JSF @ManagedBean起作用,而在CDI @Named不起作用。

更改LoginBean由JSF @ManagedBean管理,或更改AppBean bean由CDI @Named管理,然后使用@Inject而不是@ManagedProperty

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM