同様の質問を検索しましたが、少し混乱しています。ログインページがあるので、LoginBeanもそうです。
@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {
private String password="";
private String image="";
@ManagedProperty(value = "#{loginBeanIdentityNr}")
private String identityNr="";
...
成功した後、orderlistページに移動するので、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>
利用される?
@ManagedProperty
JSFがプロパティを「エクスポート」する場所ではなく、JSFがプロパティを設定する場所を宣言します。 LoginBean
を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
プロパティを初期化することはお勧めできません。