struts系列:校验(一)XML校验和函数方法校验
一、jsp示例
<form action="login" method="post"> <div class="form-group has-feedback"> <s:fielderror></s:fielderror> //重点,放一块报错信息的空间 </div> <div class="form-group has-feedback"> <input name="name" type="text" class="form-control" placeholder="Email" value=""> <span class="glyphicon glyphicon-user form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input name="password" type="password" class="form-control" placeholder="Password" value=""> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="row"> <div class="col-xs-8"> <div class="checkbox icheck"> <label> <input type="checkbox"> Remember Me </label> </div> </div> <!-- /.col --> <div class="col-xs-4"> <button type="submit" class="btn btn-primary btn-block btn-flat"><s:text name="loginSubmit"/></button> </div> <!-- /.col --> </div> </form>
二、action示例
@SuppressWarnings("serial") public class LoginAction extends ActionSupport { private static final transient Logger logger = LogManager.getLogger(LoginAction.class); private String name; private String password; public String execute() { logger.debug("name={},password={}", name, password); HttpServletRequest request = ServletActionContext.getRequest(); logger.debug("get locale = {}", request.getLocale()); if ("lings".equals(name)) { return SUCCESS; } else { return INPUT; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }
三、struts.xml示例
<action name="login" method="execute" class="com.sanro.strutsDemo.action.LoginAction"> <result name="success" type="tiles">tiger</result> //成功的跳转 <result name="input">/index.jsp</result> //校验失败的跳转 </action>
四、校验方式
1. XML校验
可以针对每个action建立一个校验文件,例如以示例action为例,需要建立一个LoginAction-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"> <!-- DTD文件信息见struts2-core-2.x.x.jar中的具体情况 --> <validators> <!--验证的每一个字段用filed表示 --> <!--验证用户名 --> <field name="name"> <!--指定使用的验证器,此处选择非空验证 --> <field-validator type="requiredstring"> <!--验证失败的错误提示信息 --> <message>用户名不能为空</message> </field-validator> </field> <!--验证pwd --> <field name="password"> <!--密码非空 --> <field-validator type="requiredstring"> <message>密码不能为空</message> </field-validator> <!--密码长度验证 --> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>密码必须为6-8位!</message> </field-validator> </field> </validators>
2. 在继承ActionSupport的action类中覆写validate()方法
@SuppressWarnings("serial") public class LoginAction extends ActionSupport { ..... @Override public void validate() { logger.debug("firstly, validate!!!"); // super.validate(); if (!password.equals("123456")) { this.addFieldError("password", "对不起,password is error!"); } } ......
附录一、更多的内置校验器
struts2-core-2.x.x.jar\com\opensymphony\xwork2\validator\validators\default.xml
<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="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator" /> <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" /> </validators>
附录二、自定义校验器
XML自带的校验器有时不能满足我们的校验需求,可以考虑自建一个校验器。
上善若水,水利万物而不争。