@PostConstruct-Methode wird nicht aufgerufen
Wollte ich @PostConstruct
zur Initialisierung einer bean in meine webapp, aber ich kann nicht ankommen es zu wirken.
Habe ich neu erstellt, das problem in einem neuen Projekt und es immer noch nicht funktionieren.
Übersehe ich etwas offensichtliches hier? So weit wie ich kann sagen, dass mein init()
Methode erfüllt alle Anforderungen aufgeführt, die in @PostConstruct
API-Referenz.
MyBean.java
:
@ManagedBean
@RequestScoped
public class MyBean {
@ManagedProperty(value="15")
private int number = 10;
@PostConstruct
public void init(){
number = 20;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
number.xhtml
:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Simple JSF Facelets page</title>
</h:head>
<h:body>
Number = #{myBean.number}
</h:body>
</html>
Ich würde erwarten, dass Number = 20
aber ich bekomme Number = 15
.
- Sollte dies funktionieren. Welchen server verwendest du? Die JSF-version? Sie können hinzufügen, eine print-Anweisung in Ihrem
init()
Methode, um zu sehen, wenn es aufgerufen wird. - Ich bin mit glassfish3.1.2 mit Mojarra 2.1.6 (SNAPSHOT 20111206)
- Seltsam. Es scheint der @ManagedProperty ist erkannt, aber die @ PostConstruct nicht. Wirklich seltsam.
- SNAPSHOT das problem sein könnte. Möchten Sie vielleicht zu vermeiden, mit es Richtung die neueste version. Mojarra 2.2.5 (oder api, impl) ist heute verfügbar.
- Es ist in der Tat ein bug. Sie sollten vermeiden, den snapshot-Versionen. Durch die Art und Weise, GlassFish 4, und als genannten oben, Mojarra 2.2+ verfügbar sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
@PostConstruct scheint aufgerufen zu werden, vor der Injektion mit @ManagedProperty, vorausgesetzt, Sie haben MyFaces 2.0, wie Sie sagen hier.
Stellen Sie sicher, dass Sie mit Mojarra 2.1, da sollte es funktionieren.
Könnten Sie versuchen, zu Debuggen, zu wissen, ob Ihre init () - Methode aufgerufen wird, bevor die Einspritzung, oder nie genannt.
Standardmäßig, wird der Frühling nicht bekannt, die @PostConstruct und @PreDestroy annotation. Um es zu aktivieren, müssen Sie entweder registrieren
CommonAnnotationBeanPostProcessor
oder geben Sie die<context:annotation-config />
im bean-Konfigurationsdatei.