Struts2进行数据的共享:
1、使用域对象,使用request、session、application三个域对象
ServletActionContext来获取各个域
2、使用ActionContext得到Map集合来共享数据
得到的request为RequestMap,用来在request域中存放数据
得到的session为SessionMap,用来在session域中存放数据
得到的application为ApplicationMap,存放的域是ServletContext
3、使用实现接口来注入Struts2的Map集合
request、session、Application分别对应的接口为:
RequestAware、SessionAware、ApplicationAware得到的也是各个域的Map集合
Struts2的类型转换
当一些数据得到的形式不是用户所想要的形式,这个时候就需要使用类型转换来实现了
要实现类型转换需要让Action继承StrutsTypeConverter类,里面需要实现两个方法,一个方法是从页面传来的数据转换为需要的类型,
另一个方法是将用户的数据转换到页面
在Action类的同目录下,还需要建立一个Action类名-conversion.properties文件,在Action同目录下的converter文件是局部转换文件,
需要在全局进行转换的情况下,就需要在类路径下创建xwork-conversion.properties文件
Struts2的国际化
在Struts2中能够实现国际化的机制,主要是因为其内部拥有一个国际化的拦截器
<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor" />
在需要国际化的Action中或者在类路径下创建国际化文件(名称_国家名.properties | message_zh_CN.properties),然后需要在Struts.xml
文件中定义<constant name="struts.custom.i18n.resources" value="gz.itcast.c_i18n.message"></constant>
在页面显示为<s:text name="国际化的名称">,在Action中也同样能够国际化显示,为getText(“国际化的名称”)
同时还定义了两个properties文件,message_zh_CN.properties、message_en_US.properties
1、使用域对象,使用request、session、application三个域对象
ServletActionContext来获取各个域
2、使用ActionContext得到Map集合来共享数据
得到的request为RequestMap,用来在request域中存放数据
得到的session为SessionMap,用来在session域中存放数据
得到的application为ApplicationMap,存放的域是ServletContext
3、使用实现接口来注入Struts2的Map集合
request、session、Application分别对应的接口为:
RequestAware、SessionAware、ApplicationAware得到的也是各个域的Map集合
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DataAction extends ActionSupport {
public String list(){
List<String> list = new ArrayList<String>();
list.add("狗屎1");
list.add("狗屎2");
list.add("狗屎3");
// 方式一:使用域对象(servlet): 工具类: ServletActionContext
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext context =
ServletActionContext.getServletContext();
request.setAttribute("rList", list);
session.setAttribute("sList", list);
context.setAttribute("aList", list);
//方式二:使用struts2提供的值栈中的Map集合: ActionContext工具类 //得到ActionContext对象
ActionContext ac = ActionContext.getContext();
//得到RequestMap ,来自于RequestAware
Map rp = (Map)ac.get("request");
rp.put("rList", list);
//得到SessionMap ,来自于SessionAware
Map sp = ac.getSession();
sp.put("sList", list);
//得到ApplicationMap,来自于ApplicationAware
Map ap = ac.getApplication();
ap.put("aList",list);
return SUCCESS;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- 该文件默认情况下必须放在项目的src目录下 -->
<struts>
<package name="data" namespace="/data" extends="struts-default">
<action name="Data_*" class="demo3.DataAction" method="{1}">
<result>/list.jsp</result>
</action>
</package>
</struts>
Struts2的类型转换
当一些数据得到的形式不是用户所想要的形式,这个时候就需要使用类型转换来实现了
要实现类型转换需要让Action继承StrutsTypeConverter类,里面需要实现两个方法,一个方法是从页面传来的数据转换为需要的类型,
另一个方法是将用户的数据转换到页面
在Action类的同目录下,还需要建立一个Action类名-conversion.properties文件,在Action同目录下的converter文件是局部转换文件,
需要在全局进行转换的情况下,就需要在类路径下创建xwork-conversion.properties文件
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class Myconver extends StrutsTypeConverter {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//页面(String)->Action(自己的类型)
//values: 页面传入的数据(字符串)
//toClass: 当前javabean属性类型:java.util.Date
@Override
public Object convertFromString(Map arg0, String[] values, Class toClass) {
try {
//如果是java.util.Date类型才需要转换
if(toClass==java.util.Date.class){
if(values!=null){
String date = values[0];
//转换成java.util.Date类型
Date dateObj = sdf.parse(date);
return dateObj;
};
}
return null;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//Action到页面的转换类型
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- 该文件默认情况下必须放在项目的src目录下 -->
<struts>
<package name="conversion" namespace="/conversion" extends="struts-default">
<action name="conversion" class="demo4.StudentAction" method="list">
<result>/list.jsp</result>
<result name="input">/add.jsp</result>
</action>
</package>
</struts>
Struts2的国际化
在Struts2中能够实现国际化的机制,主要是因为其内部拥有一个国际化的拦截器
<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor" />
在需要国际化的Action中或者在类路径下创建国际化文件(名称_国家名.properties | message_zh_CN.properties),然后需要在Struts.xml
文件中定义<constant name="struts.custom.i18n.resources" value="gz.itcast.c_i18n.message"></constant>
在页面显示为<s:text name="国际化的名称">,在Action中也同样能够国际化显示,为getText(“国际化的名称”)
import com.opensymphony.xwork2.ActionSupport;
public class Demo1 extends ActionSupport {
public String list(){
System.out.println(getText("username"));
System.out.println(getText("password"));
System.out.println(getText("login"));
return SUCCESS;
}
}
<constant name="struts.custom.i18n.resources" value="demo1.message"></constant>
同时还定义了两个properties文件,message_zh_CN.properties、message_en_US.properties