我正在使用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?
答案 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