2013-06-01 9 views
2

저는 struts2에 익숙하지 않습니다 만, 메소드 호출에서 이름에 의해 execute() 메소드가 디폴트로 호출된다는 것을 알고 있습니다. 그러나 같은 액션 클래스에서 정의 된 다른 메소드를 호출하는 방법은 무엇입니까?struts2의 한 동작에서 정의 된 다른 메서드를 호출하는 방법은 무엇입니까?

아래 예제에서 @Action 주석 덕분에 ajax에 URL 링크를 설정할 때 execute() 메서드가 호출됩니다. saveJSONDataAction.action 덕분입니다.

ajax를 통해 otherMethod()를 호출하는 URL은 어떻게 표시되어야합니까?

Action 클래스 :

@ParentPackage("json-default") 
@Action(value="getJSONDataAction") 
@Result(name="success", type="json") 
public class JSONDataAction extends ActionSupport { 
    private static final long serialVersionUID = 1L; 

    private List<Report> data = new ArrayList<Report>(); 

    public JSONDataAction(){ 
     data.add(new Report(1, "Chris", true, "2008-01-01", "orange")); 
    } 

    public String execute() { 
     return SUCCESS; 
    } 

    public String otherMethod() { 
     //do something else .. 
     return SUCCESS; 
    } 

    // getters and setters 
} 

Ajax 호출 :

$.ajax({ 
    url: "../json/saveJSONDataAction.action", 
    data: data, 
    dataType: 'json', 
    contentType: 'application/json', 
    type: 'POST', 
    success: function (res) { 
     if (res.result === 'ok') { 
     $console.text('Data saved'); 
     } 
    } 
}); 

아약스에 의해 otherMethod() 메서드를 호출하는 방법?

+1

감탄 부호가있는 문법이 있다고 생각합니다. '/ json/saveJSONDataAction! otherMethod.action'과 비슷합니다. –

답변

3

Dynamic method invocation라는 기능이 있습니다 :

동적 메소드 호출 (DMI) 다음과 같은 문자열을 사용하는 "!" 액션 이름에서 (실행 대신에) 호출 할 메소드의 이름. "Category! create.action"에 대한 참조는 "Category"액션 매핑을 사용하는 대신 create 메소드를 호출합니다.

보안 구멍이 생길 수 있으므로주의하십시오.이 동작을 올바르게 구성해야합니다 (설명서 참조).

+2

당신이 말하는 보안 허점은 건설적인 것입니다. –

+0

'strict-method-invocation'이 없으면 어떤 메소드라도 호출 할 수 있습니다. –

5

struts.xml 파일에서 실행할 방법을 지정할 수 있습니다. 기본값 인 execute을 재정의해야합니다.

<action name="MyMainAction" class="foo.bar.MyAction"> 
    <result>result.jsp</result> 
</action> 
<!-- This will call execute() --> 

<action name="MySecondAction" class="foo.bar.MyAction" method="secondExecute"> 
    <result>result.jsp</result> 
</action> 
<!-- This will call secondExecute() --> 

그러면 함수에 ../json/MySecondAction.action을 호출하기 만하면됩니다.

+1

동일하지만 주석을 사용하십시오. –

관련 문제