3、structs2 默认配置、数据处理的集中方式、请求数据封装、日期

副标题#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;
    }

}

局部

这里写图片描述

全局

这里写图片描述

相关文章

发表回复

您的电子邮箱地址不会被公开。