jsf 2.0 Feder 3 Geltungsbereich Anfrage nicht funktioniert
Ich bin versucht, den Frühling zu bieten managed beans zu jsf. Ich gehe davon aus, dass @ManagedBean wird abgeholt von JSF-container verknüpfen, der EL in JSF verwalteten bean auch, wenn ich spring durch die Konfiguration von spring-Nutzung in faces-config.xml.
Frühjahr sollen die Bohnen aber jetzt wer verwaltet Umfang der Bohnen?
Habe ich versucht, folgenden Hinweis auf die Bohnen haben es sich anforderungsbereich, aber Sie funktionieren nicht.
@ManagedBean(name="helloBean") //meant for JSF
@RequestScoped //meant for JSF
@Scope(value="request") //meant for spring
@Controller //meant for spring
public class HelloBean implements Serializable {
Eigentlich schon früher war ich mit reinen JSF und @ManagedBean und @RequestScoped wurden, gut zu funktionieren. Als ich nun versucht zu integrieren, mit spring Umfang nicht funktionieren.
Ich habe auch versucht die Einstellung bean-scope in spring config, aber Sie funktionieren wie erwartet im Rahmen des Frühlings (singleton und prototype), aber nicht web-request-Kontext.
Ich versuche zu vermeiden, dass du oben @Rahmen und die @Controller-annotation in der Hoffnung, dass JSF verwaltet Umfang aber nicht mag.
Unten sind meine Dateien snippet für das Frühjahr config und MyHelloBean, die wahrscheinlich helfen wird, besser zu kommunizieren.
<bean id="helloBean" class="com.mkyong.common.HelloBean" init-method="init" />
<bean id="myHelloBean" class="com.mkyong.common.MyHelloBean" init-method="init" >
<property name="helloBean" ref="helloBean"></property>
</bean>
@ManagedBean
@RequestScoped
@Scope(value="request")
@Controller
public class MyHelloBean implements Serializable {
private static final long serialVersionUID = 1L;
//@ManagedProperty(value = "#{helloBean}")
private HelloBean helloBean;
siehe oben MyHelloBean ich bin mit spring DI zum einstellen helloBean, die festgelegt wird durch die Feder in Ordnung. Habe ich auskommentiert @ManagedBean, die ich denke, ich kann lassen Sie es in es wie es ignoriert wird bis zum Frühjahr alle Möglichkeiten und JSF wird nicht gehen, um es zu verarbeiten, aber ich Schätze, um sicher zu sein habe ich kommentiert, dass es sich für JSF nicht verarbeiten.
Zu vervollständigen, habe ich unten in der faces-config zu aktivieren, Frühling Verwendung.
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
Grüße,
Miten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deine Herangehensweise ist ein wenig verwirrend in dem Sinne, dass es scheint, Sie mischen Spring-XML-Konfiguration und Spring Annotation-basiert Konfiguration. Wie beschrieben, als ein Beispiel hier, wenn Sie mithilfe von kommentierten Konfiguration, dann sollten Sie haben:
bestellen Frühjahr-scan für die Anmerkungen. Andernfalls, wenn Sie mit XML-Konfiguration, dann sollten Sie haben:
als standardmäßig werden die
scope
für eine Spring-bean istsingleton
.Unser team vor ähnlichen Problemen der Integration von JSF und Spring Bohnen, einschließlich Probleme mit Ihren Bereichen. Und hier bin ich teilen unser wissen.
Bereiche
Im Grunde, wenn Sie in der Anwendung definierten Kontext, dass Frühjahr wird die Verwaltung Ihrer Bohnen, also Bereiche. Frühling Karte JSF-scope Anmerkungen zu seiner Heimat und Umfang Anmerkungen.
@RequestScoped annotation zugeordnet wird @Scope("Anfrage") Spring-annotation, usw. mit anderen unterstützten Bereiche.
@ViewScoped ist nicht definiert im Frühling nativen scope-Annotationen, so (nicht sicher) wird es mit der Frühling s Standardbereich, die singleton-oder request-scope (nicht sicher).
Bean Injection
In JSF2 du verwendet @ManagedProperty Anmerkungen zur Injektion, während der Frühling wird @Autowired annotation. Was sind die Unterschiede und welche ist zu wählen?
Frühling Komponente, die Sie möchten, um zu injizieren, muss einen Wert haben, die passen jsf-injection-annotation Wert: @Component(Wert = "valueMatches") injiziert, die mit @ManagedProperty(value = "valueMatches").
Frühling Komponente, die Sie möchten, um zu injizieren, muss nicht verlangen, einen benutzerdefinierten Wert zu unterscheiden, wenn es die einzige Implementierung der bean werden Sie injizieren: @Komponente injiziert mit @Autowired.
Unseren Weg
Wir verwendet, Spring-Annotationen zur Definition von Beans, Gültigkeitsbereiche und-Injektion.
Markiert JSF-beans mit @Scope(Wert = "desiredScope"), @Controller(Wert = "beanName") und @Qualifier(Wert = "beanName") Anmerkungen. Später werden könnte, wird der Zugriff von JSF-Kontext mit Hilfe der in faces-config.xml über "beanName" - Wert definiert die im @Controller-annotation.
Markiert Frühling services mit @Service-annotation.
Injiziert wir Frühling services und JSF-beans mit @Autowired annotation.
Fanden wir ViewScope und FlashScope benutzerdefinierte implemetations im web und verwendet Sie für unsere Bohnen. Damit wir nicht verloren gehen, JSF2-Bereiche und sogar noch neue.
Hoffe, das hilft.