javaee之Struts2练习

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 ,来自于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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值