2011-11-22 94 views
4

我正在使用Struts 1.3爲一個類項目構建一個Web應用程序,並且我在Struts 1.x的AJAX兼容性方面遇到了一些問題(我聽說2.x更好, AJAX和jQuery)。Jquery Modal Forms with Struts 1.3

謝謝你的回覆,這是更新的問題:

我目前使用在同一個JSP一個jQuery UI模式窗體,並希望將表單數據發送到Struts的Action當用戶按下使用AJAX「創造新的場地」。我如何去發送(和檢索)表單和Struts動作之間的數據?

換句話說,之間的連接:

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

(這是我的模態形式透過按鈕的代碼,我不知道如何將數據附加的方式爲它是Struts Action可讀)

和Struts Action的'execute'方法(它返回一個ActionForward或null)。

再次感謝! :)

+2

什麼課程讓你使用Struts 1? –

+0

是的,我知道,這太可怕了!我將向你的TA發表你的評論:P – nicohvi

+0

(而且我是一個提交者......但是Struts 1已經過時了,使得創建現代的,可測試的軟件變得非常困難。) –

回答

4

有一件事,如果你想返回ActionForward以外的數據,你必須return null。當Struts看到一個空值ActionForward時,它不執行轉發。

一旦完成,以下類型的設計是我用來創建Struts中的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的數據是發送給客戶。

在你的ajax上,你只需要做一個HTTP GET,傳遞URL上的所有參數。請確保參數與您的Struts ActionForm匹配所需的Action類。

+2

(同意,雖然我確實已經說過空位了。)+1例如。 –

+0

謝謝!你們真棒! – nicohvi

+0

好的,遇到了另一個問題:當我嘗試使用GET發送AJAX,並在URL中添加所有參數時,我找不到404的操作,這可能是什麼原因造成的? – nicohvi

3

支持框架真的沒有在原始JavaScript/jQuery/Ajax方面有很大的不同。

您可以從Struts 1操作中返回任何您想要的內容。如果您希望返回某些狀態或Flash消息,則可以將其直接寫入響應並返回null而不是ActionForward,或者創建一個JSP來獲取所需的內容並設置適當的標頭。

如何處理Ajax請求的返回值完全取決於客戶端代碼:Struts 1不關心它是什麼類型的請求;它只會吐回配置吐出的任何東西。

+0

非常感謝回覆! – nicohvi