Spring webflow'找不到属性'例外

时间:2012-01-23 20:05:26

标签: spring spring-mvc spring-webflow

我正在使用spring webflow,这是我的流程

<view-state id="welcome">
    <transition on="emailEntered" to="checkEmail"></transition>
</view-state>
<decision-state id="checkEmail">
    <if test="alta.checkEmail(requestParameters.email)"
    then="okState"
    else="errorState"/>
</decision-state>
<view-state id="okState"/>
<view-state id="errorState"/>

我在servlet-context中启用了自动扫描:

<context:component-scan base-package="com.me.myproj" />

我收到状态checkEmail的 org.springframework.binding.expression.PropertyNotFoundException:找不到属性错误。问题是它不能识别我的'alta'bean,这是我的Alta类(放在com.me.myproj中):

@Component
public class Alta {
    public Alta(){
        System.out.println("constructor ok");
    }
    public boolean checkEmail(String email){

        return "my.name@email.com".equals(email);
    }

}

如果我显式创建bean:

<bean id="alta" class="com.me.myproj.Alta"/>

然后它工作正常。因此,似乎流上下文无法识别自动扫描的组件,尽管 alta 是实例化的(正如我在调试时看到的那样)。

我可以做些什么来避免明确声明我的流程中涉及的所有bean?

2 个答案:

答案 0 :(得分:0)

你有没有

<context:annotation-config/>  

在你的servlet-context.xml中?

答案 1 :(得分:0)

当您在XML中显式创建bean时,您将命名名为“alta”(id值)的bean。这就是为什么你可以从Alta类执行方法,引用“alta.checkEmail(...)”。

<bean id="alta" class="com.me.myproj.Alta"/>

如果要避免XML声明并仅使用注释,则应通过将名称作为参数[1]传递来在注释中指定该名称。例如:

@Component("alta")
public class Alta {
    public Alta(){
        System.out.println("constructor ok");
    }
    public boolean checkEmail(String email){

        return "my.name@email.com".equals(email);
    }
}

希望这有帮助。

[1] http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/stereotype/Component.html