[Struts 2 3] Struts 2 액 션 퍼 가기 유형

11020 단어 struts2
[Struts 2 1] Struts Hello World 에서http://bit1129.iteye.com/blog/2109365간단 한 Action 을 설정 하 였 습 니 다. 설정 은 다음 과 같 습 니 다.
 
<!DOCTYPE struts PUBLIC  
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
        "http://struts.apache.org/dtds/struts-2.3.dtd">  
<struts>  
    <package name="/simple" namespace="/simple" extends="struts-default">  
        <action name="helloworld" class="com.tom.actions.HelloWorldAction" method="executeAction">  
            <result name="success">/htmls/user.jsp</result>  
        </action>  
    </package>  
</struts>

 
result 리 트 윗 의 네 가지 상용 유형
action 설정 항목 의 하위 요소 result 는 두 가지 속성 을 포함 합 니 다. name 과 type, name 속성 값 은 action 처리 결과 와 일치 합 니 다. type 은 action 결과 의 점프 유형 을 나타 내 고 네 가지 기본 값 을 포함 합 니 다.
 
1. dispatcher 는 forward, 즉 점프 를 요청 합 니 다. type 속성 을 지정 하지 않 을 때 기본 값 은 dispatcher 입 니 다.request 는 현재 action 에서 다른 보기 (jsp, action 또는 velocity 등) 로 이동 할 때 변 하지 않 고 사용자 에 게 투명 합 니 다.
 
2. type = redirect, 방향 변경
   2.1 재 설정 은 요청 을 다시 시작 하 는 것 을 의미 합 니 다. 사용 자 는 브 라 우 저 URL 이 변 하 는 것 을 볼 수 있 습 니 다. 두 개의 서로 다른 요청 이기 때문에 현재 action 에 대응 하 는 request 는 그 후의 request 와 완전히 독립 되 어 있 습 니 다. 뒤의 request 는 현재 action 에 대응 하 는 request 의 설정 속성 값 을 공유 할 수 없습니다.
   2.2 Struts 2 는 현재 action 이 뒤의 보기 에 매개 변 수 를 전달 하 는 것 을 지원 합 니 다. 예 를 들 어
<result type="redirect">/pages/abc.jsp?userId=${user.id}</result>

이것 은 / pages / abc. jsp 로 전송 할 때 요청 매개 변수 userId 를 가 져 올 수 있 습 니 다. 매개 변수 값 은 ${user. id} 입 니 다. 이것 은 현재 action 의 user 대상 에서 id 속성 을 추출 하고 action 은 getUser () 방법 이 있 으 며 user 대상 은 getId () 방법 이 있 습 니 다. 이것 은 ognl 표현 식 입 니 다.
3. type = redirect Action, 어떤 Action 으로 다시 설정
      3.1 같은 가방 에 있 는 Action 으로 이동 하여 다음 설정 을 사용 합 니 다.
<result type="redirectAction">helloworld</result>

   현재 action 이 있 는 패키지 (package) 의 namespace 를 helloworld 로 전환 하 는 action 을 표시 합 니 다.
 
    3.2 다른 가방 아래 Action 은 다음 설정 을 사용 합 니 다.
 
<result type="redirectAction">
      <param name="actionName">otherAction</param>
      <param name="namespace">otherNamespace</param>
</result>
 
4. plainText 일반 텍스트 내용
    plainText 는 점프 할 view 를 텍스트 로 되 돌려 주 겠 다 고 밝 혔 습 니 다. 다음 설정 을 사용 하 십시오. 현재 action 에 접근 할 때 abc. jsp 의 원본 내용 을 되 돌려 줍 니 다. abc. jsp 를 html 코드 로 해석 하 는 것 이 아 닙 니 다.
 
<result type="plainText">
      <param name="location">abc.jsp</param>
      <param name="charSet">UTF-8</param>  <!--   UTF-8     abc.jsp,              -->
</result>

 
예시
1. /htmls/user.jsp
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<!--message   Action ,      ${message}-->
<!--message   URL      ,   ${param.message}-->
    Hello, ${message} 
</body>
</html>
 
2. HelloWorldAction.java
package com.tom.actions;

public class HelloWorldAction {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String executeAction() {
        setMessage("Welcome to the Struts2 world");
        return  "success";
    }
}
 
3. struts.xml
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

    <package name="resultType" namespace="/resultType" extends="struts-default">
        <action name="plainText" class="com.tom.actions.HelloWorldAction" method="executeAction">
            <result name="success" type="plainText">/htmls/user.jsp</result>
            <!--           user.jsp      <html>   -->
        </action>
        <action name="dispatcher" class="com.tom.actions.HelloWorldAction" method="executeAction">
            <result name="success" type="dispatcher">/htmls/user.jsp</result>
            <!--     ,request  ,  user.jsp ${message}      -->
        </action>
        <action name="redirect1" class="com.tom.actions.HelloWorldAction" method="executeAction">
            <result name="success" type="redirect">/htmls/user.jsp</result>
            <!---           user.jsp     http://localhost:8688/web/htmls/user.jsp-->
            <!--${message}       ,    ,      jsp,  jsp JSTL     ,     -->
        </action>
        <action name="redirect2" class="com.tom.actions.HelloWorldAction" method="executeAction">
            <result name="success" type="redirect">/htmls/user.jsp?message=${message}</result>
            <!--user.jsp  ${param.message}  JSTL        -->
        </action>
        <action name="redirectAction1" class="com.tom.actions.HelloWorldAction" method="executeAction">
            <!--HelloWorldAction   dispatcher  action-->
            <!--dispatcher  action   forward /htmls/user.jsp,  ,user.jsp    dispatcher action     -->
            <!--        URL dispatcher  action URL-->
            <result name="success" type="redirectAction">dispatcher</result>
        </action>
        <action name="redirectAction2" class="com.tom.actions.HelloWorldAction" method="executeAction">
            <result name="success" type="redirectAction">
                <param name="actionName">otherAction</param>
                <param name="namespace">otherNamespace</param>
            </result>
        </action>
    </package>
    <package name="other" namespace="/resultType/otherNamespace" extends="struts-default">
        <!--redirectAction2       ,    action namespace    redirectAction2  namespace   -->
        <action name="otherAction">
            <!--  ActionSupport   user.jsp,  ActionSupport    message,  user.jsp  message    -->
            <result>/htmls/user.jsp</result>
        </action>
    </package>

</struts>

 
전역 (package 범위 의) result
하나의 항목 에 있어 서 일부 result 의 설정 은 하나의 가방 에 국한 되 는 것 이 아니 라 통 일 된 것 입 니 다. 예 를 들 어 < result name = "error" > error. jsp > / result > 는 전체 프로젝트 가 통용 되 어야 합 니 다. Struts 는 global result 의 설정 을 제공 합 니 다.
 
        <global-results>
            <result name="error">error.jsp</result>
            <result name="exception">exception.jsp</result>
        </global-results>
        <global-exception-mappings>
            <exception-mapping exception="java.lang.Throwable" result="exception">
            </exception-mapping>
        </global-exception-mappings>
 
 
안 타 깝 게 도 global - results 와 global - exception - mappings 는 package 단계 로 만 정의 할 수 있 습 니 다. 즉, package 의 하위 요소 로 만 정의 할 수 있 습 니 다. package 의 하위 요소 로 정의 한 후에 같은 struts. xml 다른 package 에서 action 은 이러한 항목 등급 의 result 설정 을 사용 할 수 없습니다. 해결 방법 은 추상 적 인 기본 패 키 지 를 정의 하 는 것 입 니 다.이 base 패키지 에서 이 항목 등급 의 전역 설정 을 방지 합 니 다. 그러면 각 가방 을 이 가방 에서 계승 하면 됩 니 다.
 
1. struts. xml 설정
 
 
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

    <package name="base" namespace="" extends="struts-default" abstract="true">
        <global-results>
            <result name="error">/htmls/error.jsp</result>
            <result name="exception">/htmls/exception.jsp</result>
        </global-results>
        <global-exception-mappings>
            <exception-mapping exception="java.lang.Throwable" result="exception">
            </exception-mapping>
        </global-exception-mappings>
    </package>

    <package name="resultType" namespace="/resultType" extends="base">

        <action name="error" class="com.tom.actions.HelloWorldAction" method="errorCall">
            <!--     <result type="error"></result>   HelloWorldAction error,    result    -->
        </action>
        <action name="exception" class="com.tom.actions.HelloWorldAction" method="exceptionCall">
            <!--     <result type="exception"></result>   HelloWorldAction exception,    result    -->
        </action>
    </package>
</struts>
 
 
2. HelloWorldAction. java 코드
 
package com.tom.actions;

public class HelloWorldAction {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String executeAction() {
        setMessage("Welcome to the Struts2 world");
        return  "success";
    }

    public String errorCall() {
        return "error";
    }
    public String exceptionCall() {
        throw new NullPointerException("This is a NPE");
    }
}

 
3.

좋은 웹페이지 즐겨찾기