Spring webflow 中页面表单校验的方式

对于spring wf 中的表单项验证,wf提供了两种实现。第一种是在实体bean中实现校验逻辑,第二种则是通过一个单独的validator来实现。这两种实现都会默认提供参数 [b]ValidationContext[/b],用于记录验证错误信息和当前用户的访问信息。

以上第一种方式,将校验方法定义在实体内是最简单的方式;随着webflow会话的执行,[b]view-state[/b]节点提交的动作将会自动触发实体定义的校验逻辑(即对对应页面表单项的该实体中的属性值进行统一验证)。至于具体实现方式如下: 在实体bean内创建名为 [b]validate${state}[/b]的方法,state即等待表单校验的[b]view-state[/b]节点的ID,比如 在flow配置文件中有如下节点配置
<view-state id="enterBookingDetails" model="booking">
<transition on="proceed" to="reviewBooking">
</view-state>

flow执行到此页面节点时,会将模型 booking 与该页面表单绑定,booking的属性和表单项name必然对应,当触发[b]_eventId=proceed[/b]时,如果在booking中存在符合上面第一种校验的方法,flow则自动调用该方法进行表单验证,方法定义如下:

public class Booking {
private Date checkinDate;
private Date checkoutDate;
...

public void validateEnterBookingDetails(ValidationContext context) {
MessageContext messages = context.getMessageContext();
if (checkinDate.before(today())) {
messages.addMessage(new MessageBuilder().error().source("checkinDate").
defaultText("Check in date must be a future date").build());
} else if (!checkinDate.before(checkoutDate)) {
messages.addMessage(new MessageBuilder().error().source("checkoutDate").
defaultText("Check out date must be later than check in date").build());
}
}
}

类推,那么有多个视图节点需要做校验的时候就在该booking 添加多个校验方法。

校验的第二种途径,是有别于实体单独创建一个校验器,具体做法为创建一个名为[b]${model}Validator[/b]的class,比如bookingValidator,然后定义一个名为[b]validate${state}[/b]的公共方法,比如validateEnterBookingDetails(EnterBookingDetails即上面的view-state ID)
@Component
public class BookingValidator {
public void validateEnterBookingDetails(Booking booking, ValidationContext context) {
MessageContext messages = context.getMessageContext();
if (booking.getCheckinDate().before(today())) {
messages.addMessage(new MessageBuilder().error().source("checkinDate").
defaultText("Check in date must be a future date").build());
} else if (!booking.getCheckinDate().before(booking.getCheckoutDate())) {
messages.addMessage(new MessageBuilder().error().source("checkoutDate").
defaultText("Check out date must be later than check in date").build());
}
}
}

创建完这样的class,记得交给spring管理,实例beanId按标准命名就好了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值