一:数据校验
1、用execute()方法实现数据校验
继承自ActionSupport类,重写execute()
2、用validate()方法实现数据校验
继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Action类中重写validate()方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过OGNL表达式负责输出。
3、用validateXxx()方法实现数据校验
在validate()方法中对数据验证是可以工作的,如果在字段非常多的情况下,而且每个字段又有很复杂的验证,那么我们的validate方法中的代码会越来越多。 针对特定的方法输入的数据的验证我们把他放到validateXxx方法中,Xxx是方法名的首字母大写形式
4、用struts2的验证框架实现数据校验
① 为什么要用验证框架:
当验证规则比较复杂时,Action类的代码将变得很繁琐,假如我们要对电话号码的格式进行验证,是非常麻烦的
②验证框架的优点:
Struts2中内置了一个验证框架,将常用的验证规则进行了编码实现,使用验证框架时,用户无需再进行编码,只要在外部配置文件中指定某个字段需要进行的验证类型,并提供出错误信息即可,从而大大减轻了开发者的负担,提高开发效率
③命名规范:
1、文件的命名规则:
ActionName-validation.xml,ActionName为需要校验的Action类名,如:UserAction-validation.xml
2、文件存放路径:
该文件与Action类的class文件位于同一个路径下
3、文件格式:包括如下3个配置元素
<field>: 为每一个需要校验的字段添加一个验证元素<field>,name属性表示要校验的字段名。
<field-validator>: 使用该元素来指定校验规则,type属性为校验规则名
<message>: 使用该元素来指定校验出错时要显示的标签,key属性指向资源文件中的标签名
二:国际化
Struts2的国际化:
WWWH:what.where.why.how
1:什么是国际化?
国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。
2:在什么样的状况下使用国际化?
国际化是指的多语言支持,比方说你登录一个系统后,页面上的标签可以默认显示中文,或者默认显示英文。国际化在web开发中比较常用,以便于不同母语的用户使用系统。
3:为什么使用国际化?
原因:因为语言种类繁多
4:重点:如何国际化一个项目?
1.1在struts.xml文件中配置如下
<!-- 在struts2.xml中配置指定资源文件的基名 --> <constant name="struts.custom.i18n.resources" value="message"></constant> <!-- 指定编码方案,如果想要转换国际化 必须指定为UTF-8 默认就是u8--> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- --> <constant name="struts.ui.theme" value="simple"></constant>
1.2配置资源文件
例:如下
中文:message.properties
register.page=\u7528\u6237\u6CE8\u518C register.title=\u65B0\u7528\u6237\u6CE8\u518C name=\u59D3\u540D password=\u5BC6\u7801 repassword=\u786E\u8BA4\u5BC6\u7801 telephone=\u7535\u8BDD\u53F7\u7801 username=\u7528\u6237\u540D submit=\u7ACB\u5373\u6CE8\u518C
英文:
register.page=HouserRent-User Register register.title=New User Register name=Name password=Password repassword=RePassword telephone=Telephone username=UserName submit=Register Now
1.3
创建Action类:
package cn.Action; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class languageAction extends ActionSupport { private static final long serialVersionUID = 1L; private String name; private String password; private String repassword; private String telephone; private String username; public static long getSerialversionuid() { return serialVersionUID; } public String getName() { return name; } public String getPassword() { return password; } public String getRepassword() { return repassword; } public String getTelephone() { return telephone; } public String getUsername() { return username; } public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public void setRepassword(String repassword) { this.repassword = repassword; } public void setTelephone(String telephone) { this.telephone = telephone; } public void setUsername(String username) { this.username = username; } @Override public String execute() throws Exception { return SUCCESS; }
步骤4:创建jsp页面
使用ognl表达式展示国际化!<s:text>,也可以放在<s:i81n>标签中。
<head> <title><s:text name="register.page"></s:text></title> </head> <body> <s:fielderror></s:fielderror> <h2><s:text name="register.title"></s:text></h2> <s:form action="loignAction"> <table> <tr> <td><s:text name="name" ></s:text></td> <td><s:textfield name="name" key="name"></s:textfield><td> </tr> <tr> <td><s:text name="password"></s:text></td> <td><s:textfield name="password"></s:textfield></td> </tr> <tr> <td><s:text name="repassword"></s:text></td> <td><s:textfield name="repassword"></s:textfield></td> </tr> <tr> <td><s:text name="telephone"></s:text></td> <td><s:textfield name="telephone"></s:textfield></td> </tr> <tr> <td><s:text name="username"></s:text></td> <td><s:textfield name="username"></s:textfield></td> </tr> <tr> <td colspan="2"><s:submit value="%{getText('submit')}"></s:submit></td> </tr> </table> </s:form> </body>
1.5
改变浏览器的语言首选项,通过上移,下移按钮来改变!
2:如何使用国际化验证错误?
1.1在Action类中植入如下代码
@Override public void validate() { if(this.name==null||this.name.equals("")) { this.addActionError(this.getText("name.null")); } }
1.2
在资源文件中各自添加代码
name.null=Name cannot be null name.null=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
完成!