я использую,PostConstruct вызывается дважды
- JSF
- Spring
- OCPSoft Перепишите
- Glassfish 4/Jetty 9
Я заметил, что мои бобы вызвать @PostConstruct
' s init()
способ дважды. Вот пример компонента, который был инициализирован дважды, если вам понадобится web.xml
или что-нибудь еще, просто опубликуйте его - у меня кончились идеи.
@ManagedBean(name = "userBean")
public class UserBean implements Serializable {
private static final long serialVersionUID = -1347081883455053542L;
@ManagedProperty(value = "#{param.username}")
private String username;
private Users user;
private Authentication authentication;
private StreamedContent avatar;
@PostConstruct
public void init() {
System.out.println("userbean init and username: " + username);
user = Users.findByUsername(username);
authentication = SecurityContextHolder.getContext()
.getAuthentication();
if (user == null) {
Navigator.redirect("/601");
return;
}
if (user.isKeepPrivate() == true && !username.equals(authentication.getName())) {
Navigator.redirect("/600");
return;
}
avatar = new DefaultStreamedContent(UserUtils.getAvatar(user), "image/png");
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public StreamedContent getAvatar() {
return avatar;
}
public void setAvatar(StreamedContent avatar) {
this.avatar = avatar;
}
}
Положите точку останова на метод и, когда он попал, внимательно прочитайте стек вызовов для подсказок. – BalusC
Если вы настроили на управление вашими бобами Spring, аннотации, такие как '@ ManagedBean',' @ ManagedProperty', будут просто проигнорированы. Вместо этого вам нужно будет иметь эквивалентные аннотации Spring. – Tiny
@ Tiny Здесь вы можете предположить, что bean управляется JSF, который также может обрабатывать '@ PostConstruct'. –