我想知道是否有人可以提供帮助。我正在整理一个Spring Webflow应用程序,并试图找出要做验证的工作。
根据文档http://static.springsource.org/spring-webflow/docs/2.0.x/reference/html/ch04s10.html,我创建了一个验证器类,它符合$ {model} Validator的名称模式,并且符合验证$ {state}的方法名称
// validation method for About You
public void validateAboutYou(QB2MotorQuote p_quote, ValidationContext p_ctx) {
MessageContext messages = p_ctx.getMessageContext();
// mandatory checks ...
mandatoryChecks_AboutYou(p_quote, messages);
// field format/content validation checks ...
formatChecks_AboutYou(p_quote, messages);
}
如上面的代码所示,我调用了2种方法来执行强制检查,然后格式化检查。
这很好 - 当提交页面时,SWF会调用验证类 - 优秀:)
我现在要做的是通过ajax调用formatChecks_AboutYou(p_quote,messages)方法。当用户模糊每个字段时,我想发出一个ajax请求来验证该字段,从而将所有验证代码和规则置于服务器端。
我找不到任何关于如何使用SWF的文章。我使用标准的Spring MVC应用程序做了类似的事情,我在控制器上有一个请求映射,专门用于ajax验证。这样做的好处是控制器已经有了对验证器的引用,并且数据已经绑定到表单后备对象。
但我不确定如何使用SWF来解决这个问题。我暂时想到为ajax验证编写控制器的想法:
@Controller
public class AjaxController {
@Autowired
private QuoteValidator m_validator;
@RequestMapping(value="/AjaxValidate", method=RequestMethod.GET)
public String ajaxValidate(HttpServletRequest p_req, Model p_model) {
// controller has access to validate via autowired m_validate
// but the method signature I want to call is:
// formatChecks_AboutYou(QB2MotorQuote p_quote, MessageContext p_messages)
// Don't know where to get a MessageContext from
return "ajaValidate";
}
}
我能够从客户端调用这个没问题,但我怀疑数据是否会绑定到命令对象,我不知道我将从哪里获取MessageContext对象。
如果有人能帮助我,我会非常感激; 干杯
森
答案 0 :(得分:1)
首先,您需要定义不转换到任何位置并渲染片段的全局转换
<transition on="forgotPassword">
<evaluate expression="mybean.forgotPassword(flowRequestContext)" />
<render fragments="forgotPassword"/>
</transition>
当您转换到此
时,将运行validate方法private void validateForgotPassword(ValidationContext context) {
String event = context.getUserEvent();
Object formObject = null;
String formName = null;
GenericFormValidator formValidator = new GenericFormValidator(validator);
if (StringUtils.equalsIgnoreCase(event, "forgotPassword")) {
formObject = this.getForgotPasswordForm();
formName = "forgotPasswordForm";
formValidator.perform(context, formObject, formName, ForgotPasswordForm.DefaultValidationGroup.class);
}
}
你需要在瓷砖上定义你的块
<definition name="pages.guest.info" extends="master-layout">
<put-attribute name="bodyId" value="guest-info" />
<put-attribute name="body" value="/WEB-INF/jsp/pages/guest-info.jsp"/>
<!-- specified for ajax reloading by webflow-->
<put-attribute name="forgotUsernamePassword" value="/WEB-INF/jsp/pages/guest/chunks/request-login.jsp"/>
<put-attribute name="forgotPassword" value="/WEB-INF/jsp/pages/guest/chunks/forget-password.jsp"/>
<put-attribute name="jsPageBundle" value="/bundles/guest.js" />
<put-list-attribute name="css" inherit="true">
<add-attribute value="/bundles/module.guest.css" />
</put-list-attribute>
<put-list-attribute name="js" inherit="true">
<add-attribute value="/js/pages/guest-flow.js" />
</put-list-attribute>
</definition>
希望这是一个起点。