【问题标题】:Getting null value in Action from Ajax request in Struts 2从 Struts 2 中的 Ajax 请求中获取操作中的空值
【发布时间】:2014-06-29 12:18:10
【问题描述】:

我正在尝试向 Action 发送 AJAX 请求,其中我正在从 JSP 页面发送一个参数。因此,我的 Action 类正在接收 Ajax 请求,但我使用 AJAX 类发送的参数是 Action 类中的 null

这是我的行动课:

 public class AjaxAction{

String name;
private  String welcomeMessage;

public String execute(){

    System.out.println("AJax called "+name);
    welcomeMessage="Hello"+name;
    return "success";
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getWelcomeMessage() {
    return welcomeMessage;
}

public void setWelcomeMessage(String welcomeMessage) {
    this.welcomeMessage = welcomeMessage;
}
 }

这是我的struts.xml 文件:

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
 <struts>

 <constant name="struts.devMode" value="true" />
    <package name="json" namespace="/" extends="json-default">
    <interceptors>
        <interceptor-stack name="defaultStack">
            <interceptor-ref name="json">
                <param name="enableSMD">true</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>
    
            <action name="ajaxAction" class="com.action.AjaxAction">
                <result type="json"/>
            </action>
    </package>

这是我的 Jsp 文件:

<title>Struts Ajax Example</title>
<script type="text/javascript">
    function ajaxStruts() {
        data = {
                name:$("#name").val(),
            };

            alert(data);
            $.ajax({
                  type: 'GET',
                  contentType:'application/x-www-form-urlencoded',
                  url:'ajaxAction',
                  data: $("#ajaxform").serialize(),
                  success: function(data){
                    alert(data);
                  }
                
            });
        
    }
</script>

 </head>
 <body>

<fieldset>
    <form method="POST" id="ajaxform">
        Name::<input type="text" id="name" name="name"> 
         <input type="button" name="submit"
            value="submit" onclick="return ajaxStruts();">
    </form>
</fieldset>
<fieldset>
    <div id="ajaxResult"></div>
</fieldset>
 </body>
 </html>

【问题讨论】:

    标签: ajax json struts2 struts2-json-plugin


    【解决方案1】:

    问题在于struts.xml 中的拦截器。

    删除它们或正确指定它们。您已覆盖 defaultstack,这不是一个好习惯。

    您应该将拦截器堆栈的名称设置为与 struts 堆栈不同的自定义名称。

    例如,将您的堆栈命名为 mystack。

     <interceptors>
        <interceptor-stack name="mystack">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="json">
                <param name="enableSMD">true</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>
    

    这表示defaultstack的所有拦截器+json拦截器。这将被打包在名为 mystack 的拦截器堆栈中

    【讨论】:

    【解决方案2】:

    如果您想创建一个自定义拦截器堆栈并将其设置为默认拦截器堆栈,您可以通过以下方式执行此操作,但将 json interceptor 放在堆栈前面,但是除非您以 json 格式发送数据,否则它不会给您任何帮助.

    <interceptors>
        <interceptor-stack name="jsonDefaultStack">
            <interceptor-ref name="json">
                <param name="enableSMD">true</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>
    
    <default-interceptor-ref name="jsonDefaultStack" />
    

    默认的拦截器堆栈包含一个功能,可以使用您应该作为POST 请求发送的参数来填充您的操作 bean。

    function ajaxStruts() {
        $.ajax({
              type: "POST",
              contentType: "application/x-www-form-urlencoded",
              url: "<s:url action='ajaxAction' namespace='/'/>",
              dataType: "json",
              data: $("#ajaxform").serialize(),
              success: function(data){
                alert(data);
              }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2014-03-11
      • 1970-01-01
      • 2016-07-13
      相关资源
      最近更新 更多