struts 2——表单校验+国际化
目录
说明
简单的表单校验+国际化
项目的结构
图片:
配置文件web.xml
代码片
.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>xxx</display-name>
<!-- strust 2的核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<!-- 两者之间不能有空格 -->
<url-pattern>/ *</url-pattern>
</filter-mapping>
</web-app>
配置文件struts.xml
,代码片
.
<?xmi version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 全局属性 -->
<constant name="struts.devMode" value="true" />
<!-- 使用国际化 资源文件名:messageResources-->
<constant name="struts.custom.i18n.resources" value="messageResources" />
<package name="Struts2_OGNL_DEMO" extends="struts-default">
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="helloworld" class="text2_LanJieQi.HelloWorldInterceptor" />
</interceptors>
<action name="text" class="text2_LanJieQi.MyAction">
<result>/success.jsp</result>
<!-- action中引用拦截器 -->
<interceptor-ref name="helloworld" />
<!--引用默认拦截器 -->
<interceptor-ref name="defaultStack" />
</action>
<action name="login" class="text1_JiaoZheng_GuoJiHuai.LoginAction">
<result name="input">/login.jsp</result>
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
说明:
必须引入默认拦截器,不然功能受阻。
action类LoginAction.java
,代码片
.
package text1_JiaoZheng_GuoJiHuai;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String name;
private String password;
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;
}
//action默认执行方法
public String execute(){
if (name.equals("123")&&password.equals("123"))
return SUCCESS;
else
return ERROR;
}
}
表单校验配置文件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>
<!-- 验证表单name -->
<field name="name">
<!-- 类型 -->
<field-validator type="Stringlength">
<!-- 最小长度 -->
<param name="minLength">10</param>
<!-- 最大长度 -->
<param name="minLength">20</param>
<!-- 错误信息 -->
<message key="name.length" />
</field-validator>
<!-- 不为空 -->
<field-validator type="requiredstring">
<message key="name.requried" />
</field-validator>
</field>
<!-- 验证表单password-->
<field name="password">
<field-validator type="stringlength">
<param name="minLength">8</param>
<param name="maxLength">10</param>
<message key="password.length" />
</field-validator>
<field-validator type="requiredstring">
<message key="password.requried" />
</field-validator>
</field>
</validators>
说明:
要和验证的action类在一个目录下,
在标签中使用key属性,来引用国际化文件内容
国际化文件messageResources_zh_CN.properties
,代码片
.
name.requried=不为空
name.length=长度在{minLength}-${maxLength}之间
password.requried=不为空
password.length=长度在{minLength}-${maxLength}之间
说明
在标签中使用key属性,来引用国际化文件内容
路径必须在项目根目录
校验的表单
,代码片
.
<%@ page language="java" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2标签库调用声明 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>注册页面</title>
<s:head/>
</head>
<body>
<!-- 用户登录表单 -->
<!-- validate="true"表示客户端校验 -->
<s:form action="login" validate="true">
<table width="40%" height="76" border="0">
<!-- 各标签定义 -->
<s:textfield name="name" label="用户名"/>
<s:password name="password" label="密 码" />
<s:submit value="登录" align="center"/>
</table>
</s:form>
</body>
</html>
说明
validate="true"表示客户端校验
< s:form action=“login” validate=“true” >
总结
1. 使用表单校验,需要 开启< s:form action="login" validate="true" >。
2. 使用国际化文件,需要在标签中使用key属性。
**引用包是最大的困难(一步一步来)**