请问怎么用struts2验证框架对数组进行验证? js 拼成 json 或者 String 通过ajax 或者servlet 传后台 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 原来程序都是username[]传进去的,改js的话,action也得改,动作太大了 例如:对一个Action中的一个数组字段userNames校验:public class TestArrayValidateAction { private String[] userNames; public String[] getUserNames() { return userNames; } public void setUserNames(String[] userNames) { this.userNames = userNames; } public String execute() { return "success"; }}分三步:第一步:定义自定义校验器:java代码:import com.opensymphony.xwork2.validator.ValidationException;import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;public class MyValidator extends FieldValidatorSupport{ public void validate(Object object) throws ValidationException { String fieldName = getFieldName(); String[] userNames = (String[]) getFieldValue(fieldName, object); validateArray(object, fieldName, userNames); } private void validateArray(Object object, String fieldName, String[] userNames) { //下面可以换成自己需要的代码。 if(userNames == null) addFieldError(fieldName, object); for(int i=0;i<userNames.length;i++) { System.out.println("正在对userNames第"+i+"个进行校验"); } } public int getIndex(){ return 0; }}第二步:注册自定义校验器,在classpath下定义validators.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Definition 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"><validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> <validator name="MyValidator" class="zzg.study.struts2.validators.MyValidator"/></validators>这一步要注意,要把struts中default-package的校验器都声明一遍,否则原来的校验器不起作用了。第三步:在actionName的包中定义校验配置文件TestArrayValidateAction-validation.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators> <field name="userNames"> <field-validator type="MyValidator"> <message>The index:${index} has error!</message> </field-validator> </field></validators>写一个jsp文件测试:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Custom validate</title></head><body> <s:form action="TestArrayValidate"> <s:textfield name="userNames"/> <s:textfield name="userNames"/> <s:textfield name="userNames"/> <s:submit/> </s:form></body></html>随便输入几个字符串,提交,控制台将会输出:正在对userNames第0个进行校验正在对userNames第1个进行校验正在对userNames第2个进行校验校验器起作用了。 如果能够修改action里的方法的话,在action里实现public void validate(){...}方法,对userNames字段进行校验比较简单。 这个验证如果没有什么重用性,那就在action中,用得写validateXxx的方法去验证吧。你说的是后台的验证吧。 使用Struts2的xml验证框架就可以解决了参考:http://blog.csdn.net/cuihaiyang/article/details/6295763 示例:登录验证LoginActionpublic class LoginAction extends ActionSupport { private IUserService userService; //登录的用户名 private String username; //登录的密码 private String password; //处理登录后的提示信息 private String tip; //----------------------- //依赖注入 //----------------------- public String getUsername() { return username; } public IUserService getUserService() { return userService; } public void setUserService(IUserService userService) { this.userService = userService; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTip() { return tip; } public void setTip(String tip) { this.tip = tip; } @SuppressWarnings("unused") private boolean isInvalid(String value) { return (value == null || value.length() == 0); } //处理用户请求 @Override public String execute() throws Exception { // TODO Auto-generated method stub //创建ActionContext实例 ActionContext ctx = ActionContext.getContext(); //调用业务逻辑方法来处理登录请求 int loginResult = userService.Login(getUsername(), getPassword()); if(loginResult == userService.LOGIN_SUCCESS) { ctx.getSession().put(Constants.USER, username); setTip("您已经成功登陆系统"); // 设置session Map map = ActionContext.getContext().getSession(); map.put("username", getUsername()); return SUCCESS; } else { //用户名和密码不匹配 setTip("用户名/密码不匹配"); return Constants.LOGIN_FAIL; } } }LoginAction-validation.xml:<?xml version="1.0" encoding="GBK"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators> <field name="username"> <field-validator type="requiredstring"> <message>用户名必填!</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>您输入的用户名只能是字母和数组,且长度必须在4到25之间</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>密码必填!</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>您输入的密码只能是字母和数组,且长度必须在4到25之间</message> </field-validator> </field></validators> 如何使用SSH快速还原linux服务器上的数据库 帮忙看下错误日志 window7系统下 cookie文件夹 请教网站系统构建问题?多多指教! 如何用struts实现树状菜单 初学者的问题 javabean和enterprise javabean 谁能帮帮我啊!~~~~~~~~ timer.schedule()无法苏醒执行timeTask??? 新手求救~~~~~~~~~~~ public建立的函数不能用sql...help... DButils的带参数QueryRunnaer带参数查询总是报错 刚进公司,让我写个接口,还要把数据库查询写成配置文件,求救啊
private String[] userNames; public String[] getUserNames() {
return userNames;
} public void setUserNames(String[] userNames) {
this.userNames = userNames;
}
public String execute() {
return "success";
}
}
分三步:
第一步:
定义自定义校验器:
java代码:import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;public class MyValidator extends FieldValidatorSupport{ public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
String[] userNames = (String[]) getFieldValue(fieldName, object);
validateArray(object, fieldName, userNames);
}
private void validateArray(Object object, String fieldName, String[] userNames) {
//下面可以换成自己需要的代码。
if(userNames == null)
addFieldError(fieldName, object);
for(int i=0;i<userNames.length;i++) {
System.out.println("正在对userNames第"+i+"个进行校验");
}
}
public int getIndex(){
return 0;
}
}
第二步:注册自定义校验器,在classpath下定义validators.xml:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
<validator name="MyValidator" class="zzg.study.struts2.validators.MyValidator"/>
</validators>这一步要注意,要把struts中default-package的校验器都声明一遍,否则原来的校验器不起作用了。
第三步:
在actionName的包中定义校验配置文件TestArrayValidateAction-validation.xml:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="userNames">
<field-validator type="MyValidator">
<message>The index:${index} has error!</message>
</field-validator>
</field>
</validators>
写一个jsp文件测试:<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Custom validate</title>
</head>
<body>
<s:form action="TestArrayValidate">
<s:textfield name="userNames"/>
<s:textfield name="userNames"/>
<s:textfield name="userNames"/>
<s:submit/>
</s:form>
</body>
</html>随便输入几个字符串,提交,控制台将会输出:
正在对userNames第0个进行校验
正在对userNames第1个进行校验
正在对userNames第2个进行校验
校验器起作用了。
http://blog.csdn.net/cuihaiyang/article/details/6295763
public class LoginAction extends ActionSupport { private IUserService userService;
//登录的用户名
private String username;
//登录的密码
private String password;
//处理登录后的提示信息
private String tip;
//-----------------------
//依赖注入
//-----------------------
public String getUsername() {
return username;
}
public IUserService getUserService() {
return userService;
}
public void setUserService(IUserService userService) {
this.userService = userService;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
@SuppressWarnings("unused")
private boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
//处理用户请求
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
//创建ActionContext实例
ActionContext ctx = ActionContext.getContext();
//调用业务逻辑方法来处理登录请求
int loginResult = userService.Login(getUsername(), getPassword());
if(loginResult == userService.LOGIN_SUCCESS) {
ctx.getSession().put(Constants.USER, username);
setTip("您已经成功登陆系统");
// 设置session
Map map = ActionContext.getContext().getSession();
map.put("username", getUsername());
return SUCCESS;
} else { //用户名和密码不匹配
setTip("用户名/密码不匹配");
return Constants.LOGIN_FAIL;
}
}
}LoginAction-validation.xml:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名必填!</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>您输入的用户名只能是字母和数组,且长度必须在4到25之间</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>密码必填!</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>您输入的密码只能是字母和数组,且长度必须在4到25之间</message>
</field-validator>
</field>
</validators>