2016-05-01 14 views
0

別のマネージドBeanにマネージドBeanを注入しようとしています(ユーザーがloggenになっている場合にのみ、1つのマネージドBeanでアクションを実行する必要があり、そのユーザーは別のマネージドBeanに保存されます) 。しかし、NULLを返す!各マネージドBeanは異なるXHTMLページにリンクしているので、新しいHTTPセッションが作成される可能性があります。管理下のプロパティがnullを返す

最初の管理Bean:

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

@EJB 
private travellerUserEntityFacadeLocal travellerUserEntityFacade; 

private String userName; 
private String password; 
private Boolean loggedIn; 
/** 
* Creates a new instance of travellerLoginManagedBean 
*/ 
public travellerLoginManagedBean() { 
} 

public Boolean getLoggedIn() { 
    return loggedIn; 
} 

public void setLoggedIn(Boolean loggedIn) { 
    this.loggedIn = loggedIn; 
} 

public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public Boolean validUser(){ 
    loggedIn=true; 
    return travellerUserEntityFacade.checkLogin(this.userName, this.password)==true; 
} 

public String login() { 
    if (validUser()==true){ 
     return "/travellerHome.xhtml"; 
    }else{ 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario y/o password incorrecto!")); 
     return "/travellerLogin.xhtml"; 
    } 

} 

} 

秒管理Bean:

@Named(value = "travellerSearchFlightsManagedBean") 
@RequestScoped 
public class travellerSearchFlightsManagedBean{ 


@EJB 
private itineraryTravellerFacadeLocal itineraryTravellerFacade; 

@EJB 
private itineraryFacadeLocal itineraryFacade; 

@ManagedProperty(value="#{travellerLoginManagedBean}") 
private travellerLoginManagedBean loginBean; 
private String departureLocation; 
private String arrivalLocation; 
private Date departureDate; 
private int departureHour; 
private int departureMinute; 
private int numPassengers; 
private int maxStops; 
private String economyOrBusiness; 
private ArrayList<itineraryDTO> itinerariesList; 
private ArrayList<itineraryTraveller> searchList; 
private itineraryTraveller selectedItinerary; 
private String stopPrint; 
private static final Logger LOG = Logger.getLogger(travellerSearchFlightsManagedBean.class.getName()); 

(......) 

public void reserveFlight(){ 
    if (loginBean.getLoggedIn()==true){ 
     System.out.println("iiiiiiiiiiiiiiiiin"); 
     //status reserved when traveller reserves an itinerary 
     selectedItinerary.setStatus('r'); 
     //set the userName from the user who reserved this itinerary before persist it in a shared among all users db 
     selectedItinerary.setUserName(loginBean.getUserName()); 
     //persist the reserved itinerary in the db 
     itineraryTravellerFacade.create(selectedItinerary); 
    }else{ 
     System.out.println("not  iiiiiiiiiiiiiiiiin"); 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Must be logged in before reserving an itinerary")); 
    } 
} 

} 

答えて

0

仕事をするためにに、豆の注入はする必要:

  • @ManagedProperty注釈を追加します。 (あなたがやった)

  • faces-config.xmlファイルに他のBeanの参照を追加します。

Apache Documentationからfaces-config.xmlの例は明確にすべき:

<managed-bean> 
    <managed-bean-name>neededBean</managed-bean-name> 
    <managed-bean-class>fqn.to.NeededBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

<managed-bean> 
    <managed-beaenter code heren-name>usingBean</managed-bean-name> 
    <managed-bean-class>fqn.to.UsingBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
    <property-name>neededBean</property-name> 
    <value>#{neededBean}</value> 
    </managed-property> 
</managed-bean> 

をあなたの特定のケースでは:

  • NeededBean = travellerLoginManagedBean
  • UsingBean = travellerSearchFlightsManagedBean

Apacheのドキュメントもビーンの注入を使用する唯一の制約があると述べている:

  • 使用してBeanが同じか、必要に応じて豆
  • よりも短くなっているスコープを持っている必要がありますBeanを使用するには、必要なBeanをパラメータとして取るプロパティ設定メソッドが必要です。
  • Beanは相互に管理依存関係を持つことはできません。

あなたはより多くの情報が必要な場合は、Apache Documentationを見てみましょう。

PS:小文字のクラス名を書くことに注意しましたが、Javaコード規約(CamelCase)ではすべてのクラス名が大文字で始まる必要があります。

+0

私はWEBINFフォルダにfacesconfigファイルを持っていません!!! btwあなたの答えのおかげで – pquin92

+0

私はあなたが言ったものと顔の設定ファイルを作成しました。しかし、それでもマネージプロパティはnullを返します。それはヌルではいけません – pquin92

+0

私は知っています。これは通常、名前の問題です(リファクタリングを行うクラス名を短縮しようとします)。私はまた、このエラーを解決した人々がプロジェクトを単に掃除することについて聞いた。両方を試みてください。 – Louis

関連する問題