2015-11-09 5 views
0

В этом примере, зачем нужна аннотация @ManagedBean? В методе setPalyBean() он получает параметр и устанавливает его в приватную переменную «playerBean». Это похоже на обычный дизайн класса Java в мире, отличном от JSF. Будет ли он работать так же, если @ManagedBean будет удален?Тег ManagedProperty в JSF

@Named 
@SessionScoped 
public class PlayersBean { 

    private String playerName; 
    private String playerSurname; 

    public PlayersBean() { 
    playerName = "Rafael"; 
    playerSurname = "Nadal"; 
    } 

//getters and setters 
} 

@ManagedBean 
@ViewScoped 
public class ProfileBean { 

    @ManagedProperty("#{playersBean}") 
    private PlayersBean playersBean; 
    private String greetings; 

    public ProfileBean() {  
    } 

    public void setPlayersBean(PlayersBean playersBean) { 
    this.playersBean = playersBean; 
    }     
} 

ответ

0

Таковы правила:

  1. @ManagedBean - требуется, если:

    • Хочет получить доступ к компоненте с точки зрения, в старом стиле JSF
    • Хочет получить контейнер для управления впрыском чего-либо в фасоль, в старом стиле JSF
    • Хотите контейнер для управления жизненным циклом вашего компонента, ...
    • Хотите назвать ваш компонент чем-то отличным от стандартного имени класса. Соглашение об именах по умолчанию преобразует имя класса в стандартную java, так что у вас будет бит с именем proileBean. Если вы хотите, чтобы решить, что боб под другим именем, скажем profile, вы должны будете использовать эту аннотацию
  2. @ManagedProperty и связанные с ним сеттер необходимы, если вы хотите, чтобы контейнер автоматически вводить что-либо в вашей боб , Их правила. Это сводится к тому, как происходит инъекция - Отражение.

Будет ли это работать без аннотации? Нет - без этой аннотации (и в зависимости от вашей версии JSF; 2.2 допускает всевозможные вещи), контейнер не знает о вашем компоненте и не будет предложено принять меры

Вы можете сэкономить на хлопотах и принять конвенции CDI:

  1. Заменить @ManagedBean с @Named (требуется это аннотация, только если вам нужно получить доступ к компоненту в пределах страницы, в противном случае, это лишняя -Каждая фасоль в контексте CDI автоматически управляется)

  2. Заменить @ManagedProperty на @Inject. С помощью этой аннотации вы можете полностью отключить сеттер и приемник. Вам также не нужно беспокоиться о масштабах компонента, в который вы впрыскиваете или из него.

  3. заменить текущий @ViewScoped с одним из javax.faces.view.ViewScoped

+0

Что бы версия CDI этого примера? Благодарю. – user697911

+0

Просмотреть мое обновление @ user697911 – kolossus

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