我有一个Spring 3.2.11和Webflow 2.4.0应用程序,使用JSF2进行视图渲染。
我的一个页面使用视图状态模型bean进行验证,但是当调用validatePasswordChange方法时,bean属性尚未自动装配,因此我获得了NPE。我不明白为什么他们是空的??
感谢您提出任何建议。
这是我的bean验证方法。为什么passwordService属性为null?
public void validatePasswordChange(ValidationContext context) {
MessageContext messages = context.getMessageContext();
if (!confirmPassword.equals(newPassword)) {
messages.addMessage(new MessageBuilder().error()
.source("confirmPassword")
.defaultText(
this.getMessage("kyn.password.change.validation.noMatch"))
.build());
};
List<String> validationMessages = passwordService
.validatePasswordPolicyCompliance(getUsername(),
newPassword);
if (validationMessages != null) {
for (String message : validationMessages) {
messages.addMessage(new MessageBuilder().error()
.source("confirmPassword")
.defaultText(message).build());
}
}
}
这是我的flow.xml的一个片段。我在开始时将passwordUpdateBean插入到flowScope中,并期望model属性使用它:
<on-start>
<evaluate expression="passwordUpdateBean" result="flowScope.passwordUpdateBean"></evaluate>
</on-start>
<view-state id="passwordChange" model="passwordUpdateBean">
<transition on="proceed" to="update"/>
<transition on="cancel" to="redirectCancel" validate="false"/>
</view-state>
这是我的bean config xml:
<bean id="passwordUpdateBean"
class="com.xyz.PasswordUpdateBean"
scope="prototype"
parent="abstractWebBean">
<property name="passwordService" ref="passwordManagementService"/>
<property name="appUserDetailsService" ref="appUserDetailsService"/>
<property name="autoLoginAfterEnrollment" value="true"/>
<property name="usernamePasswordAuthenticationProvider" ref="usernamePasswordAuthenticationProvider"/>
</bean>
答案 0 :(得分:0)
bean 将不会自动连接您的流定义。您必须将bean显式检索到流定义中。
注意 @Service 类注释可在流文件中自动访问(i.e <evaluate expression="myService.getPasswordUpdateBean()" result="flowScope.passwordUpdateBean"/>)
<on-start>
<evaluate expression="....getPasswordUpdateBean()" result="flowScope.passwordUpdateBean"></evaluate>
<!-- where '....' = either @service class or some other obj that holds a reference to the bean you seek -->
</on-start>