[英]SpringBeanFacesELResolver not working with spring WebFlow
[英]After registering SpringBeanFacesELResolver, @Named @RequestScoped behaves like Spring singleton
我正在創建新的JSF 2.2應用程序並發現此問題:
我有:1)EL解析器
<application>
<locale-config>
<default-locale>ru</default-locale>
</locale-config>
<resource-bundle>
<base-name>i18n.messages</base-name>
<var>msg</var>
</resource-bundle>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
<!--<variable-resolver>org.springframework.web.jsf.WebApplicationContextVariableResolver</variable-resolver>-->
</application>
2)面對豆
@Named("SubscriberBalance")
@RequestScoped
public class SubscriberBalance extends AbstractManagedBean {
private static final long serialVersionUID = -7018658511320101002L;
private SupportService supportService;
private SubscriberBalanceWrapper subscriberBalance;
private Long subscriberId;
private Integer subscriberType;
private Integer months;
3)Spring4 +休眠4
之后,我的bean在所有用戶之間共享數據。 它的行為類似於Spring Singleton。 似乎它忽略了JSF范圍,只處理Spring范圍。 因此,@Scope(“ request”)可以工作,但是@RequestScope不能。 如何正確做? 為什么會這樣呢? 謝謝
我想我已經解決了這個問題,可能會對某人有所幫助。
因此,我們有:
1)CDI-Java EE 6的功能
2)Spring框架
3)JSF
首先,在我的案例中,Spring從未與CDI交互。 CDI @Named注釋是JSR 330注釋。 但是從Spring 3.0開始,Spring還會掃描這些注釋。 這就是為什么在我的情況下@Named起作用的原因。
第二個@Named與@Component完全等效。 因此,我也可以在其中使用@Component。 @RequestScope和其他JSF注釋將不起作用,因為它不是JSF上下文,而是Spring上下文。 如果需要使用JSF上下文,則需要使用@ManagedBean等。@Scope注釋之所以有效,是因為它是由Spring管理的bean,因為我為我的bean啟用了包掃描。
因此,方法是:
1)使用帶有@ManagedBean批注的純JSF。 我不喜歡這樣。 缺點是:DI集成不良,工作量大等
2)使用CDI。 我不喜歡它,因為我們有春天
3)到處使用Spring。 我喜歡這種方式,因為它為我提供了系統所有部分的單向控制。 在我真正需要它們之前,我不必考慮JSF特定的注釋。
因此在JSF中,后端bean應該是:
@Controller
@范圍(...)
請看這篇文章謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.