Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1188576
  • 博文数量: 89
  • 博客积分: 10546
  • 博客等级: 上将
  • 技术积分: 1510
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-16 01:24
文章分类

全部博文(89)

文章存档

2012年(7)

2011年(4)

2010年(5)

2009年(52)

2008年(21)

分类: Java

2009-03-18 18:23:12

如果 ActionBean 的属性是一个普通的 Java 类,如何进行验证?Stripes 提供了 ValidateNestedProperties Annotation 解决这个问题。

我们添加一个address字段,它是一个 Address类。

	@ValidateNestedProperties({
@Validate(field="zipcode", required=true),
@Validate(field="addressLine1", required=true),
@Validate(field="addressLine2", required=true)
})
private Address address;

public Address getAddress() {
return address;
}

public void setAddress(Address address) {
this.address = address;
}


Address
ZipCode:


Address Line1:


Address Line2:




package tutorial.action;

/**
*
* @author hantsy
*/
public class Address {
private String zipcode;
private String addressLine1;
private String addressLine2;


public Address() {
}

public String getAddressLine1() {
return addressLine1;
}

public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}

public String getAddressLine2() {
return addressLine2;
}

public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}



public String getZipcode() {
return zipcode;
}

public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}

}


重新运行这个程序,验证信息。

显示错误信息

在 前面的例子中,我们都是显示全部错误信息。 提供几个可选的属性action, beanclass, field, globalErrorsOnly。添加一个 action 或是 beanclass 可以指定显示哪个 form 的错误信息。设置field 参数可以精确指明哪一个输入字段的错误。globalErrorsOnly 可以设为 true 或 false ,表明是否显示全局错误。

		...

User Registeration





Username:

...

这里我们在表单上面显示全局错误,在username 字段上显示其详细信息。

在userExsited 方法中添加一个 globalError。

@ValidationMethod(on="register")
public void userExsited(ValidationErrors errors) {
if("testuser".equals(username)){
errors.add("username", new SimpleError("This username is taken , please select a different one."));
}
if(!errors.isEmpty()){
errors.addGlobalError(new SimpleError("Error occurs while saving data. Please fix it firstly."));
}
}

如果你想完全自己定义错误信息,控制转向的页面。Stripes 提供了ValidationErrorHandler接口,它提供一个handleValidationErrors方法,你可以自己处理错误。

		public class RegisterActionBean extends BaseActionBean implements ValidationErrorHandler {
...
public Resolution handleValidationErrors(ValidationErrors errors) throws Exception {
return new ForwardResolution("/error.jsp");

}
...
}

这里如果出现错误,转向error.jsp。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="stripes" uri="" %>
"">




JSP Page


Error!






重新运行这个程序,验证失败时,不再回到原来页面,而跳转到了error.jsp页面显示错误信息。

阅读(1699) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-12-22 09:30:15

哦,对了,我查过官方文档了,但是还是搞不定。 这个

chinaunix网友2009-12-22 09:26:52

上面的confirmPswd写错了,应该是sex,因为在瞎试,所以写成这样了,没注意看就贴过来了。

chinaunix网友2009-12-22 09:25:15

白先生你好!   我又碰到问题了,我在学着写一个注册的JSP,性别一项想用radio来选择. 但是,没法设置默认值,怎么试都不行. lady 我把checked的双引号改成单引号也不行,如果去掉引号会报错,改用checked="true"也不行,改用checked="${true}"也不行。 另外,关于radio的显示文本,好象也不能设置,我试图这样写, lady 结果却没有显示文字,只有一个radio的圆圈圈本身。 这个控件怎么用啊?能教教我吗? 另外再问个问题,@ValidateNestedProperties能再嵌套吗?如果User类里面再用了Address类,或者其它什么类,这时候的 Annotation 怎么写呀?