<二>
struts2.x国际化
编写国际化文件格式为basenam_语言代码_国家代码.properties 例如 basename_zh_CN.properties
实现struts2.x国际化有两种配置
1.编写struts.properties,这个文件放大classes文件夹下
struts.custom.i18n.resources=basename
2再struts.xml
<constant name="struts.custom.i18n.resources" value="basename"></constant>
使用国际化文件
<s:form method="post" action="reg" id="id">
<p>
<s:textfield name="username" label="%{getText('username')}"></s:textfield>
</p>
<p><s:textfield name="age" label="%{getText('age')}"></s:textfield></p>
<p><s:datetimepicker name="date2" label="%{getText('data2')}" displayFormat="yyyy年MM月dd日"></s:datetimepicker></p>
<p>
<s:submit value="提交"></s:submit>
</p>
</s:form>
label的属性,为为国际化文件的key
basename_zh_CN.properties
username=\u7528\u6237\u540D
age=\u5E74\u9F84
data2=\u6CE8\u518C\u65E5\u671F
struts2.x可以用ActionSupport类的validate()方法验证前台的数据
@Override
public void validate() {
if(username.length()>10){
this.addFieldError("username", "用户名太长了");
}
if(username.equals("")){
this.addFieldError("username", "用户名不能为空");
}
if(age<0||age>150){
this.addFieldError("age", "请输入合法的年龄");
}
}
<三>
struts2.x工作流程
1客户端提交一个请求(例如http://localhost:8080/Struts2/reg.action)
2请求到一系列的filter(例如 ActionContextCleanUp,FilterDispatcher等)
3filterDispatch是核心控制器
4FilterDispatch去访问ActionMapping是否调用哪个action,FilterDispatcher则把请求的处理结果交给ActionProxy
5ActionProxy通过struts.xml,找到调用的action类
6ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,但再调用之前,ActionInvoaction会
根据配置加载Action相关所有Interceptor
7一旦action执行完了,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result
struts2通配符的使用
struts2通配符的作用简化struts.xml文件,例如一个电子商城,用户(User),商品(merchandise),订单等
那么struts2配置文件可以这么写
<package name="demo" extends="struts-default">
<action name="*" class="com.struts2.{1}Manger" method="add{1}">
<result name="success">/add{1}.jsp</result>
</action>
</package>
编写action
package com.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class UserManger extends ActionSupport{
/**
* struts2通配符的使用
*/
private static final long serialVersionUID = 1L;
public String addUser(){
System.out.println("添加用户");
return SUCCESS;
}
public String deleteUser(){
System.out.println("删除用户");
return SUCCESS;
}
public String modiflyUser(){
System.out.println("修改用户");
return SUCCESS;
}
public String findUser(){
System.out.println("查找用户");
return SUCCESS;
}
}
通配符中几个特殊的标记,如下所述:
*:可以匹配0个或多个任意字符,但是不包括正斜杠”/”;
**:可以匹配0个或多个任意字符,包括正斜杠’’/”在内
\:反斜杠,转义字符
再jsp页面
<s:a href="User.action">添加用户</s:a>
还有一个更加简介的配置
<package name="demo2" extends="struts-default">
<action name="*_*" class="com.struts2.{2}Manger" method="{1}{2}">
<result name="success">{1}{2}.jsp</result>
</action>
</package>
再jsp页面这么写
<s:a href="add_User.action">添加用户</s:a>
<s:a href="delete_User.action">删除用户</s:a>
<s:a href="find_User.action">查找用户</s:a>
<s:a href="modifly_User.action">修改用户</s:a>
请注意:最好再struts2配置文件一种通配方式,不然找不找action
struts2.x国际化
编写国际化文件格式为basenam_语言代码_国家代码.properties 例如 basename_zh_CN.properties
实现struts2.x国际化有两种配置
1.编写struts.properties,这个文件放大classes文件夹下
struts.custom.i18n.resources=basename
2再struts.xml
<constant name="struts.custom.i18n.resources" value="basename"></constant>
使用国际化文件
<s:form method="post" action="reg" id="id">
<p>
<s:textfield name="username" label="%{getText('username')}"></s:textfield>
</p>
<p><s:textfield name="age" label="%{getText('age')}"></s:textfield></p>
<p><s:datetimepicker name="date2" label="%{getText('data2')}" displayFormat="yyyy年MM月dd日"></s:datetimepicker></p>
<p>
<s:submit value="提交"></s:submit>
</p>
</s:form>
label的属性,为为国际化文件的key
basename_zh_CN.properties
username=\u7528\u6237\u540D
age=\u5E74\u9F84
data2=\u6CE8\u518C\u65E5\u671F
struts2.x可以用ActionSupport类的validate()方法验证前台的数据
@Override
public void validate() {
if(username.length()>10){
this.addFieldError("username", "用户名太长了");
}
if(username.equals("")){
this.addFieldError("username", "用户名不能为空");
}
if(age<0||age>150){
this.addFieldError("age", "请输入合法的年龄");
}
}
<三>
struts2.x工作流程
1客户端提交一个请求(例如http://localhost:8080/Struts2/reg.action)
2请求到一系列的filter(例如 ActionContextCleanUp,FilterDispatcher等)
3filterDispatch是核心控制器
4FilterDispatch去访问ActionMapping是否调用哪个action,FilterDispatcher则把请求的处理结果交给ActionProxy
5ActionProxy通过struts.xml,找到调用的action类
6ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,但再调用之前,ActionInvoaction会
根据配置加载Action相关所有Interceptor
7一旦action执行完了,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result
struts2通配符的使用
struts2通配符的作用简化struts.xml文件,例如一个电子商城,用户(User),商品(merchandise),订单等
那么struts2配置文件可以这么写
<package name="demo" extends="struts-default">
<action name="*" class="com.struts2.{1}Manger" method="add{1}">
<result name="success">/add{1}.jsp</result>
</action>
</package>
编写action
package com.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class UserManger extends ActionSupport{
/**
* struts2通配符的使用
*/
private static final long serialVersionUID = 1L;
public String addUser(){
System.out.println("添加用户");
return SUCCESS;
}
public String deleteUser(){
System.out.println("删除用户");
return SUCCESS;
}
public String modiflyUser(){
System.out.println("修改用户");
return SUCCESS;
}
public String findUser(){
System.out.println("查找用户");
return SUCCESS;
}
}
通配符中几个特殊的标记,如下所述:
*:可以匹配0个或多个任意字符,但是不包括正斜杠”/”;
**:可以匹配0个或多个任意字符,包括正斜杠’’/”在内
\:反斜杠,转义字符
再jsp页面
<s:a href="User.action">添加用户</s:a>
还有一个更加简介的配置
<package name="demo2" extends="struts-default">
<action name="*_*" class="com.struts2.{2}Manger" method="{1}{2}">
<result name="success">{1}{2}.jsp</result>
</action>
</package>
再jsp页面这么写
<s:a href="add_User.action">添加用户</s:a>
<s:a href="delete_User.action">删除用户</s:a>
<s:a href="find_User.action">查找用户</s:a>
<s:a href="modifly_User.action">修改用户</s:a>
请注意:最好再struts2配置文件一种通配方式,不然找不找action