У меня возникла проблема при попытке установить переменную 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);
}
}
}
Как поменять область действия на ViewScoped? – Daniel
Боюсь, что это не сработает, и SessionScoped. Но я предпочитаю продолжать использовать RequestScope, и он должен работать в RequestScope. – user1312260
не заметили это раньше ... попробуйте сделать это ManagedBean bean вместо Named ... – Daniel