3、struts2 默認配置、數據處理的集中方式、請求數據封裝、日期轉換器

struts2 默認配置

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;
    }

}

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;
    }

}

局部
這裏寫圖片描述

全局
這裏寫圖片描述

發佈了52 篇原創文章 · 獲贊 77 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章