У меня есть пара вопросов о том, как я вызываю методы в EL. Может быть, кто-нибудь объяснит, как это на самом деле работает.
Я сделал этот очень простой пример:
index.xhtml
<h:body>
<!-- Using a method -->
#{bba.salute()}
<br/>
<h:outputText value="#{bba.salute()}"/>
<br/>
<!-- Using a method from an injected bean-->
#{bba.b.doSomething()}
</h:body>
BackBeanA.java
@Named("bba")
@SessionScoped
public class BackBeanA implements Serializable {
private static final long serialVersionUID = 5671761649767605303L;
@Inject
private BackBeanB b;
public String salute() {
return "Hi! I am 'A'";
}
public BackBeanB getB() {
return b;
}
public void setB(BackBeanB b) {
this.b = b;
}
}
BackBeanB.java
@Named("bbb")
@SessionScoped
public class BackBeanB implements Serializable {
private static final long serialVersionUID = -4786092545430477941L;
public String doSomething() {
System.out.println("Hello!!!");
return "I am a SessionScopped Backing Bean, my name is 'B' and i am doing something";
}
}
Вот те вопросы, которые у меня есть:
Когда я вызываю метод из компонента поддержки, когда мне нужно использовать скобки (), а когда нет? Пример: если я сниму скобки с # {bba.salute ()}
, я получаю сообщение об ошибке, в котором говорится (Не удается найти свойство под названием 'salute')
Я также хочу узнать, как вызвать метод из внедренного bean-компонента. Я ввел BackBeanB внутри BackBeanA, но когда я говорю # {bba.salute ()}
на странице,Я не вижу сообщения I от метода в BackBeanB
. Почему это? Внедренные бины не нужно инициализировать в @PostConstruct
, верно? Достаточно ли геттеров и сеттеров для внедренного bean-компонента?
Обратите внимание на строку, где я говорю
, это работает, но затмение отображает предупреждение, подобное этому:
Почему?