17

同様の質問を検索しましたが、少し混乱しています。私はログインページを持っているので、LoginBean もそうです。

@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {    
    private String password="";
    private String image="";
    @ManagedProperty(value = "#{loginBeanIdentityNr}")
    private String identityNr="";
...

成功すると、オーダーリストのページに移動するので、OrderBean もあります。

@ManagedBean(name = "OrderBean")
@SessionScoped
       public class OrderBean {
            List<Ordery> sdList;

            public List<Order> getSdList() {

                try {

                    String identityNr ="";
                    ELContext elContext = FacesContext.getCurrentInstance().getELContext();
                    LoginBean lBean = (LoginBean) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "loginBean");
                    identityNr =lBean.getIdentityNr();
                    sdList = DatabaseUtil.getOrderByIdentityNr(identityNr);
    ...
    }

LoginBean 全体は必要なく、ManagedProperty "loginBeanIdentityNr" だけが必要です。しかし、以下のコードは (もちろん) 機能しません。

identityNr = (String) FacesContext.getCurrentInstance()
                        .getApplication().getELResolver()
                        .getValue(elContext, null, "loginBeanIdentityNr");

今回は null を返します。Bean プロパティ全体が必要な場合は、これらの Bean を注入できますよね? それで、このアプローチについて何か提案はありますか?使用でき<f:attribute>ますか?

4

1 に答える 1

44

@ManagedProperty、JSF がプロパティを「エクスポート」する場所ではなく、JSF がプロパティを設定する場所を宣言します。LoginBeanのas プロパティを注入するだけですOrderBean

public class OrderBean {

    @ManagedProperty(value="#{loginBean}")
    private LoginBean loginBean; // +setter

    // ...
}

このようにしてOrderBean

loginBean.getIdentityNr();

または、OrderBeanリクエストまたはビューをスコープ化する場合は、identityNrプロパティのみを設定することもできます。

public class OrderBean {

    @ManagedProperty(value="#{loginBean.identityNr}")
    private String identityNr; // +setter

    // ...
}

具体的な問題とは関係ありません:String空の文字列でプロパティを初期化することは、お粗末な方法です。

于 2011-05-14T19:30:39.810 に答える