2011-11-22 79 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