Вызов методов со страницы JSF вызывает сомнения

У меня есть пара вопросов о том, как я вызываю методы в 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";
    }
}

Вот те вопросы, которые у меня есть:

  1. Когда я вызываю метод из компонента поддержки, когда мне нужно использовать скобки (), а когда нет? Пример: если я сниму скобки с # {bba.salute ()} , я получаю сообщение об ошибке, в котором говорится (Не удается найти свойство под названием 'salute')

  2. Я также хочу узнать, как вызвать метод из внедренного bean-компонента. Я ввел BackBeanB внутри BackBeanA, но когда я говорю # {bba.salute ()} на странице,Я не вижу сообщения I от метода в BackBeanB . Почему это? Внедренные бины не нужно инициализировать в @PostConstruct , верно? Достаточно ли геттеров и сеттеров для внедренного bean-компонента?

  3. Обратите внимание на строку, где я говорю , это работает, но затмение отображает предупреждение, подобное этому:

    enter image description here

    Почему?

6
задан sfrj 6 July 2011 в 11:15
поделиться