Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF2.0 Spring3作用域请求不起作用_Spring_Jsf 2 - Fatal编程技术网

JSF2.0 Spring3作用域请求不起作用

JSF2.0 Spring3作用域请求不起作用,spring,jsf-2,Spring,Jsf 2,我试图使用spring向jsf提供托管bean。我假设@ManagedBean将被JSF容器拾取,以将JSF中的EL链接到托管bean,即使我通过在faces-config.xml中配置spring用法来使用spring也是如此 Spring将提供bean,但现在谁管理bean的范围? 我曾尝试在bean上进行如下注释,以使其成为请求范围,但它们不起作用 @ManagedBean(name="helloBean") //meant for JSF @RequestScoped //meant f

我试图使用spring向jsf提供托管bean。我假设@ManagedBean将被JSF容器拾取,以将JSF中的EL链接到托管bean,即使我通过在faces-config.xml中配置spring用法来使用spring也是如此

Spring将提供bean,但现在谁管理bean的范围?

我曾尝试在bean上进行如下注释,以使其成为请求范围,但它们不起作用

@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进行集成时,范围不起作用

我甚至尝试过在spring配置中设置bean作用域,但它们在spring上下文(单例和原型)中的工作与预期的一样,而不是web请求上下文

我试图避免使用上面的@Scope和@Controller注释,希望JSF能够管理作用域,但看起来不像

下面是我的spring配置和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;

@ManagedBean
@请求范围
@范围(value=“请求”)
@控制器
公共类MyHelloBean实现了可序列化{
私有静态最终长serialVersionUID=1L;
//@ManagedProperty(value=“#{helloBean}”)
私人Helloben Helloben;
在上面的MyHelloBean中,我使用spring DI设置helloBean,它由spring fine设置。我已经注释掉了@ManagedBean,我想我可以将它保留在那里,因为spring会以任何方式忽略它,JSF不会处理它,我想,但为了安全起见,我注释掉了它,让JSF不处理它

为了完成,我在faces配置中使用下面的命令来激活spring的使用

<el-resolver> 
org.springframework.web.jsf.el.SpringBeanFacesELResolver 
</el-resolver> 

org.springframework.web.jsf.el.SpringBeanFacesELResolver
问候,


Miten.

您的方法有点混乱,因为您似乎混合了Spring XML配置和Spring配置。如示例所述,如果您使用的是带注释的配置,那么您应该:

<context:component-scan base-package="com.yourcom.package" />
<bean id="helloBean" class="com.mkyong.common.HelloBean" init-method="init" scope="request" />

为注释订购Spring扫描。否则,如果使用XML配置,则应具有:

<context:component-scan base-package="com.yourcom.package" />
<bean id="helloBean" class="com.mkyong.common.HelloBean" init-method="init" scope="request" />


默认情况下,Springbean的
作用域是
单例

我们的团队在集成JSF和Springbean时遇到了类似的问题,包括它们的作用域的问题。我在这里分享我们的知识

范围 基本上现在,当您在应用程序上下文中定义时,Spring将管理您的bean,因此作用域

  • Spring和JSF支持都提供作用域时的示例:
@RequestScope注释将映射到@Scope(“request”)Spring的注释,以及其他受支持的范围

  • Spring不支持JSF提供的作用域时的示例:
@ViewScope未在Spring的本机作用域注释中定义,因此(不确定)它将使用Spring的默认作用域,即singleton或请求作用域(不确定)

豆制品 在JSF2中,您使用@ManagedProperty注释进行注入,而Spring使用@Autowired注释。有什么区别,可以选择哪个?

  • 使用@ManagedProperty注入Spring bean:
您希望注入的Spring组件必须有一个与jsf注入注释的值相匹配的值:@component(value=“valueMatches”)注入@ManagedProperty(value=“valueMatches”)

  • 使用@Autowired注入Spring bean:
如果您希望注入的Spring组件是您注入的bean的唯一实现,则它不需要自定义值来区分:@component inspected with@Autowired

我们的路 我们使用Spring的注释来定义bean、作用域和注入

我们用@Scope(value=“desiredScope”)、@Controller(value=“beanName”)和@Qualifier(value=“beanName”)注释标记JSF bean。稍后,可以通过@Controller注释中定义的“beanName”值在faces-config.xml的帮助下从JSF上下文访问这些注释

我们用@Service注释标记了Spring服务

我们使用@Autowired注释注入了Spring服务和JSF bean

我们在web上找到了ViewScope和FlashScope自定义实现,并将它们用于我们的bean。因此,我们没有丢失任何JSF2作用域,甚至添加了新的作用域


希望这能有所帮助。

你完全正确。我能够将scope=request添加到spring配置中,并将我的简单的旧jsf bean与它们的注释一起保留,它可以按预期工作。我对spring端的注释和作用域感到困惑。其他回复分享了一些关于作用域和注入的更多想法,但我觉得这一个更简单、更容易我只知道spring bean的两个作用域。这些其他作用域列在哪里?spring web(上下文加载器)理解这些新的作用域,因此它们在spring web上下文中是有意义的?或者它们对核心spring也有效?我怀疑?谢谢你的回复。我想我需要阅读一些spring web(spring mvc?)了解这些新注释、注入、服务、组件和限定符的相关说明。我更喜欢不使用它们而直接使用scope=“request”在bean配置中,正如其他回复所指出的。是的,这很好。在我们的例子中,我们只是需要JSF的ViewScope,但我们的应用程序是基于Spring beans的,所以这对我们来说更好。请注意这里提到的Spring和JSF2可能存在的问题,特别是如果您要注入Spring组件并使用状态来支持JSF支持,但Spring不支持。@JMelnik您能分享您的FlashScope代码吗?我很难找到它online@Andre抱歉,找不到。请尝试搜索类似“spring flash scope”的内容。@JMelnik我已经做了一段时间了,但运气不好。显然是spring