我試圖用spring爲jsf提供託管bean。我假設@ManagedBean將被JSF容器拾取,以將JSF中的EL鏈接到託管bean,即使我在faces-config.xml中配置spring用法時使用spring也是如此。jsf 2.0 spring 3範圍請求不起作用
春天將提供豆類,但現在誰管理豆類的範圍?
我已經嘗試過豆註釋以使其成爲請求範圍,但它們不起作用。
@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 {
其實早些時候我使用普通的JSF和@ManagedBean和@RequestScoped工作得很好。現在,當我嘗試使用彈簧進行集成時,示波器無法正常工作。
我甚至嘗試在spring配置中設置bean範圍,但是它們在spring(singleton和prototype)上下文中按預期方式工作,但不是web請求上下文。
我試圖避免使用上面的@Scope和@Controller註釋希望JSF將管理範圍,但似乎不喜歡。
下面是我的文件snippet for spring config和MyHelloBean,這可能會幫助更好地溝通。
<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;
看到上面MyHelloBean我使用彈簧DI設置爲helloBean其被彈簧精細設置。我已經評論了@ManagedBean,我認爲我可以將它留在那裏,因爲它將在任何方面被spring忽略,並且JSF不會處理它我猜,但爲了安全起見,我將它評論爲JSF不處理它。
要完成我使用下面的faces-config來激活彈簧使用。
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
問候,
米滕。
你絕對正確。我能夠將scope = request添加到spring配置中,並使用它們的註釋保留我的普通舊版jsf bean,並且它按預期工作。我對春天的註釋和範圍感到困惑。其他回覆分享了一些關於範圍和注入的更多想法,但我覺得這個更簡單,更容易遷移到將spring集成到jsf中。我只知道春豆的兩個範圍。列出的其他範圍在哪裏? spring-web(上下文加載器)理解這些新的範圍,所以它們在spring-web上下文中有意義?或者他們對核心彈簧有效,我懷疑? – Miten
[Spring Bean scope reference](http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes) – nobeh