2012-04-04 2 views
0

У меня возникла проблема при попытке установить переменную beans и вызов метода для установки пользователя через событие. Проблема в том, что viewParam работает (я могу запросить значение на странице и его набор в компоненте), но событие preRenderComponent (или preRenderView) не запущено. Странная вещь заключается в том, что если я аннотирую метод initUser с @PostConstruct, событие делает триггер, но он вызывает также и для @PostConstruct, который не является тем, что я хочу. Но если я удалю аннотацию, он вообще не вводит метод.Событие JSF preRenderComponent не будет запускаться

Ниже вы найдете мой .xhtml и ниже, что моя фасоль. Я использую netbeans и сервер Glassfish (3.0). Что я здесь делаю неправильно?

XHTML:

<f:metadata> 
     <f:viewParam name="userId" value="#{tweetBean.userId}" /> 
     <f:event listener="#{tweetBean.initUser}" type="preRenderComponent" /> 
     <f:event listener="#{tweetBean.initUser}" type="preRenderView" /> 
    </f:metadata> 

БИН:

@Named 
    @RequestScoped 
    public class tweetBean implements Serializable 
    { 
     @Inject 
     private KwetterService service; 
     private String userId; // Has Getters + setters 

     public void initUser() 
     { 
      System.out.println("test"); 

      for (User u : service.findAll()) 
      { 
       if (u.getName().equals(userId)) 
       { 
        user = u; 
        System.out.println("User found"); 
       } 
      } 

      if (user == null) 
      { 
       System.out.println("no user found with this name"); 
       user = service.find(0); 
      } 
     } 
    } 
+0

Как поменять область действия на ViewScoped? – Daniel

+0

Боюсь, что это не сработает, и SessionScoped. Но я предпочитаю продолжать использовать RequestScope, и он должен работать в RequestScope. – user1312260

+0

не заметили это раньше ... попробуйте сделать это ManagedBean bean вместо Named ... – Daniel

ответ

0

Попробуйте это:

<f:metadata> 
    <f:event type="javax.faces.event.PreRenderViewEvent" listener="#{tweetBean.initUser}" /> 
</f:metadata> 

BTW: Я считаю, что если вы используете @PostConstruct нормальный жизненный цикл обратного вызова выполняется посредством контейнер, но событие все еще не срабатывает ...

+0

Спасибо за anwser, у моего проекта были некоторые проблемы, тот же самый код работает в новом проекте. – user1312260