2016-05-01 6 views
0

Я пытаюсь внедрить управляемый bean-элемент в другой управляемый bean-компонент (мне нужно выполнить действие в одном управляемом компоненте только в том случае, если пользователь входит в систему, и этот пользователь сохраняется на другом управляемом компоненте) , Но возвращается NULL! Каждый управляемый компонент ссылается на другую страницу XHTML, поэтому, возможно, создается новый HTTP-сеанс?Управляемое свойство возвращает null

Первый управляемый компонент:

@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"; 
    } 

} 

} 

Второй управляемый компонент:

@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

Для того, чтобы работать, инъекция Bean должен:

  • Добавить @ManagedProperty аннотацию (что вы сделали)

  • Добавьте ссылку другого компонента в файл faces-config.xml.

Пример faces-config.xml из Apache Documentation следует уточнить:

<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

Апач документация также утверждает, что единственное ограничение в использовании инъекции Bean является:

  • что используя компонент должен иметь объем, который является таким же или меньше, чем необходимым боб
  • в использование bean-компонента должно иметь метод настройки свойств, который принимает необходимый компонент в качестве параметра
  • Бобы не могут управлять зависимостями друг от друга.

Если вам нужна дополнительная информация, посмотрите на Apache Documentation.

PS: Я отметил, что вы пишете имена классов строчной буквой, но с условным обозначением Java (CamelCase) каждое имя класса должно начинаться с прописного.

+0

но у меня нет файла facesconfig в моей папке WEBINF !!! btw Спасибо за ваш ответ – pquin92

+0

ok Я создал файл конфигурации лиц с тем, что вы сказали. Но все равно возвращает null управляемое свойство. и это не должно быть – pquin92

+0

Я знаю. Обычно это проблема имен (попробуйте сократить имена классов, выполняющих рефакторинг). Я также слышал о людях, которые решили эту ошибку, просто очищая проект. Попытайтесь сделать то и другое. – Louis

Смежные вопросы