副标题#e#
structs2 默认配置
1、全局视图跳转配置、配置的各项默认值
在config.xml中如此配置
<!-- 配置全局跳转视图 --> <global-results> <result name="success">/index.jsp</result> </global-results>
<!-- 配置各项默认值 --> <!-- name 只配置了访问路径名称 class 默认执行的action在struts-default有配置 <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> method 默认为execute 默认的方法execute返回值为success,对应的页面去全局视图找。 --> <action name="test"></action> <!-- 什么情况不配置class? 即处理的aciton --> <!-- 答案: 当只是需要跳转到WEB-INF下资源的时候。 --> <action name="test2"> <result name="success" type="redirect">/WEB-INF/index.jsp</result> </action>
2、structs2 数据处理的集中方式
1)直接拿到ServletApi
2)通过ActionContext类
3)实现接口的方法
public class DataAction_bak extends ActionSupport{ @Override public String execute() throws Exception { // 1. 请求数据封装; 2. 调用Service处理业务逻辑,拿到结果数据 // 3. 数据保存到域中 /* * // Struts中对数据操作,方式1: 直接拿到ServletApi,执行操作 HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext application = ServletActionContext.getServletContext(); // 操作 request.setAttribute("request_data","request_data1"); session.setAttribute("session_data","session_data1"); application.setAttribute("application_data","application_data1"); */ // 【推荐:解耦的方式实现对数据的操作】 // Struts中对数据操作,方式2: 通过ActionContext类 ActionContext ac = ActionContext.getContext(); // 得到Struts对HttpServletRequest对象进行了封装,封装为一个map // 拿到表示request对象的map Map<String,Object> request = ac.getContextMap(); // 拿到表示session对象的map Map<String,Object> session = ac.getSession(); // 拿到表示servletContext对象的map Map<String,Object> application = ac.getApplication(); // 数据 request.put("request_data","request_data1_actionContext"); session.put("session_data","session_data1_actionContext"); application.put("application_data","application_data1_actionContext"); return SUCCESS; }
/** * 数据处理,方式3: 实现接口的方法 * */ public class DataAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{ private Map<String,Object> request; private Map<String,Object> session; private Map<String,Object> application; // struts运行时候,会把代表request的map对象注入 @Override public void setRequest(Map<String,Object> request) { this.request = request; } // 注入session @Override public void setSession(Map<String,Object> session) { this.session = session; } // 注入application @Override public void setApplication(Map<String,Object> application) { this.application = application; } @Override public String execute() throws Exception { // 数据 request.put("request_data","request_data1_actionAware"); session.put("session_data","session_data1_actionAware"); application.put("application_data","application_data1_actionAware"); // return SUCCESS; } }
3、请求数据封装
regist.jsp
<body> <form action="${pageContext.request.contextPath }/user_register.action" method="post"> 用户名:<input type="text" name="user.name"><br/> 密码:<input type="text" name="user.pwd"><br/> 年龄:<input type="text" name="user.age"><br/> 生日:<input type="text" name="user.birth"><br/> <input type="submit" value="注册"> </form> </body>
User
public class User { // 封装请求数据 private String name; // 必须给set / get可以不用给 private String pwd; private int age; private Date birth; public void setName(String name) { this.name = name; } public void setPwd(String pwd) { this.pwd = pwd; } public void setAge(int age) { this.age = age; } public void setBirth(Date birth) { this.birth = birth; } public String getName() { return name; } public String getPwd() { return pwd; } public int getAge() { return age; } public Date getBirth() { return birth; } }
#p#副标题#e##p#分页标题#e#
UserAction
/** * Struts核心业务: 请求数据自动封装以及类型转换 * */ public class UserAction { // 对象类型,一定给get方法 private User user; public void setUser(User user) { this.user = user; } public User getUser() { return user; } // 处理注册请求 public String register() { System.out.println(user.getName()); System.out.println(user.getPwd()); System.out.println(user.getAge()); System.out.println(user.getBirth()); return "success"; } }
4、structs2 日期转换器
日期 默认情况下 只支持 yyyy-mm–dd
转换器类
/** * 自定义类型转换器类 * * */ public class MyConverter extends StrutsTypeConverter { // 新需求: 要求项目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日.. // 先定义项目中支持的转换的格式 DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"),new SimpleDateFormat("yyyyMMdd"),new SimpleDateFormat("yyyy年MM月dd日") }; /** * 把String转换为指定的类型 【String To Date】 * * @param context * 当前上下文环境 * @param values * jsp表单提交的字符串的值 * @param toClass * 要转换为的目标类型 */ @Override public Object convertFromString(Map context,String[] values,Class toClass) { // 判断: 内容不能为空 if (values == null || values.length == 0) { return null; } // 判断类型必须为Date if (Date.class != toClass) { return null; } // 迭代:转换失败继续下一个格式的转换; 转换成功就直接返回 for (int i=0; i<df.length; i++) { try { return df[i].parse(values[0]); } catch (ParseException e) { continue; } } return null; } @Override public String convertToString(Map context,Object o) { return null; } }
局部
全局