2011-11-22 7 views
4

클래스 프로젝트 용으로 Struts 1.3을 사용하는 웹 응용 프로그램을 작성하고 Struts 1.x의 AJAX 호환성 문제가 있습니다 (2.x는 AJAX 및 jQuery). Struts를 사용하는 Jquery Modal Forms

이 응답 해 주셔서 감사합니다,이 업데이트 된 문제 :

나는 현재 같은 JSP에서 JQuery와 UI 모달 양식을 사용하고, Struts 액션에 양식 데이터를 보낼있을 때 사용자 프레스 AJAX를 사용하여 "새로운 장소 만들기". 양식과 Struts 액션간에 데이터를 보내고 가져 오는 방법은 무엇입니까? 즉

사이의 연결 :

"Create new venue": function() { 
$.ajax({ 
    url: "/registered/insertVenue.do", 
    data: 
}); 

(이 모달 양식에 대한 내 작성 버튼의 코드를, 나는 그것을 할 수있는 방법으로 데이터를 연결하는 방법을 모른다 Struts Action에 의해 읽을 수있다.)

그리고 ActionForward 또는 null을 반환하는 Struts Action의 'execute'메소드.

다시 한번 감사드립니다! :)

+2

Struts 1을 사용하는 클래스는 무엇입니까?! –

+0

그래, 나도 알아, 끔찍해! 내 TA에게 귀하의 의견을 보여 드리겠습니다 : P – nicohvi

+0

(그리고 나는 커미터입니다 ...하지만 Struts 1은 오래되어 쓸모 없으며 현대적이고 시험 가능한 소프트웨어를 만드는 것보다 어렵습니다.) –

답변

4

ActionForward 외부의 데이터를 반환하려는 경우 한 가지, return null이어야합니다. Struts는 null ActionForward을 볼 때 앞으로를 실행하지 않습니다.

일단 다음과 같은 유형의 디자인은 내가 스트럿츠에서 JSON 응답 작성하는 데 사용되는 것입니다, 수행 :

public interface Result { 

    public void applyResult(HttpServletRequest request, HttpServletResponse response) throws Exception; 
} 


public abstract class ResultBasedAction extends Action { 

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 
     Result result = execute(mapping, form, request); 
     if (result == null) { 
      throw new Exception("Result expected."); 
     } 

     result.applyResult(request, response); 
     //Finally, we don't want Struts to execute the forward 
     return null; 
    } 

    public abstract Result execute(ActionMapping mapping, ActionForm form, HttpServletRequest request) throws Exception; 
} 


public class JsonResult implements Result { 

    private JSONObject json; 

    public JsonResult(JSONObject json) { 
     this.json = json; 
    } 

    public void applyResult(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     response.addHeader("Content-Type", "application/json"); 
     response.getOutputStream().write(json.toString().getBytes("UTF-8")); 
     response.getOutputStream().flush(); 
    } 
} 

모든 당신의 AJAX 관련 응답이 ResultBasedAction 조치를 구현하는 것, 그리고 데이터에 대한 Result이 될 고객에게 보냈습니다.

아약스에서는 URL의 모든 매개 변수를 전달하기 만하면 HTTP GET을 입력하면됩니다. 매개 변수가 필요한 Action 클래스의 Struts ActionForm과 일치하는지 확인하십시오.

+2

(동의 함, 이미 실제로 null 비트라고 말했지만.) 예를 들면 +1. –

+0

고마워요! 당신들은 멋진데! – nicohvi

+0

다른 문제가 있습니다. GET을 사용하여 AJAX를 보내고 URL에 모든 매개 변수를 추가하려고하면 404가 나타나지 않습니다. 그 이유는 무엇입니까? – nicohvi

3

뒷받침 프레임 워크는 실제 JavaScript/jQuery/Ajax의 차이점을 실제로 만들지 않습니다.

Struts 1 액션에서 원하는 것을 되돌릴 수 있습니다. 상태 또는 플래시 메시지와 같은 일부 JSON을 다시 원할 경우 ActionForward 대신 null을 반환하거나 원하는 내용으로 JSP를 만들고 적절한 헤더를 설정하십시오.

Ajax 요청의 리턴 값을 처리하는 방법은 클라이언트 측 코드에 따라 다릅니다. Struts 1은 요청 유형이 상관 없습니다. 그것은 다시 침을 뱉어 내도록 구성된 모든 것을 다시 뱉어 낼 것입니다.

+0

대단히 감사합니다 답장! – nicohvi