如何将参数传递给验证Spring Webflow的方法?

时间:2011-10-07 09:17:25

标签: java spring validation spring-webflow

如何传递方法validate {State}参数而不是模型?

我有两个对象。 MyForm表单对象和User的对象,可以修改MyForm。

查看定义:

<view-state id="finish" view="finish" model="myform">       
<transition on="submit" to="goToFinish" bind="true" validate="true" />
</view-state>

我的验证方法

private MessageContext context;

public void validateSummary(MyForm myForm, MessageContext context) throws 
BusinessException {
        this.context = context;

        validateAddress(myForm);

....

如何验证用户的属性?没有将User设置为MyForm对象?

请帮忙。

1 个答案:

答案 0 :(得分:2)

来自Spring Webflow Documentation

  • 以编程方式执行模型验证有两种方法。第一种是在模型对象中实现验证逻辑。第二个是实现外部Validator。两种方式都为您提供ValidationContext来记录错误消息并访问有关当前用户的信息

只需创建一个名为validate${state}的公共方法,其中${state}是您希望运行验证的视图状态的ID(在您的示例中):

<view-state id="finish" view="finish" model="myform">       
    <transition on="submit" to="goToFinish" bind="true" validate="true" />
</view-state>

默认验证器将是myform模型对象中的公共方法:

public void validateFinish( ValidationContext context ) {

     ...
     context.getUserPrincipal() // current user
     ...
}

ValidationContext允许您在验证期间获取MessageContext来记录消息。它还公开了有关当前用户的信息,例如发出信号的userEvent和当前用户的Principal身份。

来自ValidationContext API:

 // The current user event that triggered validation.
 java.lang.String  getUserEvent() 

 // The current user.   
 java.security.Principal  getUserPrincipal() 

 // Obtain the value entered by the current user in the UI field bound to the property provided.    
 java.lang.Object  getUserValue(java.lang.String property)