javaee之Struts2练习

来源:互联网 发布:视频去除马赛克软件 编辑:程序博客网 时间:2024/06/06 01:25
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集合


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 ,来自于RequestAwareMap rp = (Map)ac.get("request");rp.put("rList", list);//得到SessionMap ,来自于SessionAware Map sp = ac.getSession(); sp.put("sList", list);//得到ApplicationMap,来自于ApplicationAwareMap 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@Overridepublic 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到页面的转换类型@Overridepublic String convertToString(Map arg0, Object arg1) {// TODO Auto-generated method stubreturn 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


0 0