2015-03-05 5 views
0

я наткнулся на следующий вопрос: У меня есть следующие JSF боб:JSF свойство инициализации

public class MailingBean { 
    private RecipientService<?> recipientService; 
    private SearchRecipientController searchRecipientController = new SearchRecipientController(recipientService); 

    //Stuff, GET, SET 
} 

Это Бина intialized в faces-config.xml следующим образом:

<managed-bean> 
    <managed-bean-name>mailingBean</managed-bean-name> 
    <managed-bean-class>path.to.package.MailingBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    <managed-property> 
     <property-name>recipientService</property-name> 
     <value>#{playerService}</value> 
    </managed-property> 
</managed-bean> 

В редеет, когда new SearchRecipientController(recipientService) является вызывающий, recipientService - null. Можно ли каким-либо образом указать порядок инициализации? Или как я могу это исправить?

+0

У вас есть сеттер для свойства 'recipientService'? – NeplatnyUdaj

+0

@NeplatnyUdaj Вы правы. Спасибо. – user3663882

+0

@NeplatnyUdaj Конечно, делаю. Я просто не писал их явно. – user3663882

ответ

1

Вы не можете использовать управляемое свойство в конструкторе (или как в вашем случае в декларации). Вы должны использовать метод postconstruct для того, что вы пытаетесь сделать. Свойство управления устанавливается после создания объекта.

private SearchRecipientController searchRecipientController; 

@PostConstruct 
public void init(){ 
    searchRecipientController = new SearchRecipientController(getRecipientService()); 
} 

Другим способом было бы использовать searchRecipientController только через getter.

public SearchRecipientController getSearchRecipientController(){ 
    if(searchRecipientController==null){ 
     searchRecipientController = new SearchRecipientController(getRecipientService()); 
    } 
    return searchRecipientController; 
} 
Смежные вопросы