2013-08-23 2 views
4

최대한 구체적으로 시도하겠습니다.json 반환 유형 및 HTML 반환 얻기 동일한 작업으로

두 가지 방법으로 액션을 만들었습니다. 하나는 아약스를 통해 호출되고 다른 하나는 일반 제출을 통해 호출됩니다.

요점은 정규 제출 요청을받을 수 없다는 것입니다. 나는 행동 속성 만 얻었습니다.

public class ClientAction{ 

    @SMDMethod 
    public Map<String, Object> findClient(String myParam){ 
    ... 
    } 

    public String saveClient(){    
     Map<String, String[]> parameterMap = this.getRequest().getParameterMap(); 
    } 
} 

saveClient 메소드의 getRequest는 null을 반환합니다. 그러나, 왜 ??? 나는 @SMDMethod

으로 선언하지 않았고 여기에 내가 모든 다른 선언을했던 struts.xml

<action name="client" class="myCompany.ClientAction"> 
     <interceptor-ref name="customJSON"><param name="enableSMD">true</param></interceptor-ref> 
     <result type="json"><param name="enableSMD">true</param></result> 
</action> 

이다. 저는 각 메서드마다 하나씩 두 개의 클래스를 사용했지만 ClientAction과 ClientActionJSON에서는 유지 관리가 쉽지 않았습니다.

같은 클래스에서 두 가지 방법 (하나의 아약스와 다른 것)을 갖는 방법에 대한 의견.

<action name="xclient" class="myCompany.ClientAction" method="jsonMethod"> 
    <result type="json"></result> 
</action> 
<action name="yclient" class="myCompany.ClientAction" method="htmlMethod"> 
    <result type="dispatcher">/pages/y.jsp</result> 
</action> 

이제 단순히 CLIENTACTION에 두 가지 방법 jsonMethod()를 & htmlMethod()를 생성, 하나의 처리 JSON과 다른 HTML 응답 :

+0

_action_ 주석을 사용하고 중첩 된 _result_ 주석을 사용하여 결과 유형을 지정하십시오. XML에서도 마찬가지입니다. 물론 이것은 하나의 클래스에 두 개의 액션을 추가합니다.이 경우에는 "enableSMD"가 필요하지 않은 의미 체계가 약간 변경됩니다. 나는 당신이 struts2-convention-plugin (필자는 항상 그것을 확실하게 덧붙인다)에 필요할 것이라고 생각한다. – Quaternion

+0

그런 뜻인가요? "> 사실 '과 <작업 이름 ='같은 다른 하나의"클라이언트 "클래스 ="myCompany.ClientAction는 ">'당신은 여전히 ​​enableSMD을 사용하고 – Sergio1978

+1

는이되지 않도록 내 말은 ... – Quaternion

답변

2

나는 바로 샘플을 쓸 생각합니다.

[편집]

내가 다시 읽고 당신은 단지 하나의 조치가 필요한 것처럼, 그럼 간단하게 반환 유형을 결정하는 필드 (요청 매개 변수)를 사용하는 것이 보인다.

public String execute(){ 
    //..Other code 
    if(returntype.equals("json")){ 
     return "jsonresult"; 
    } 
    else{ 
     return "htmlresult"; 
    } 
} 

<action name="client" class="myCompany.ClientAction" method="jsonMethod"> 
    <result name="jsonresult" type="json"></result> 
    <result name="htmlresult" type="dispatcher">/pages/y.jsp</result> 
</action> 

나는 가정보다도 returntype 당신이 예상된다 무엇을 반환 지정하는 각 요청과 함께 전송 된 문자열 변수입니다. 양식 제출에 숨겨진 양식을 보내고 ajax 요청에 설정할 수 있습니다.

+0

사실 프로젝트의 유지 보수 작업을하고 있습니다. 내 ajax/json 함수는 프레임 워크 때문에 Map을 반환해야하지만, 지금까지는 모두 JsonAction.java에 있습니다. 그러나 비즈니스 주체별로 파일을 분할하는 방법에 대해 설명해 주시면 답변 해 주셔서 감사합니다. 이제 모든 json 및 non-json 메서드가있는 ClientAction.java가 생겼습니다. json 또는 non-json 메서드 인 경우 xml 코드 조각에 @coding_idiot이 있다고 생각합니다. – Sergio1978