Получение нулевого значения в Struts2 Action из ajax-запроса

Я пытаюсь отправить запрос AJAX в действие, в котором я отправляю один параметр со страницы JSP. Таким образом, мой класс Action получает запрос ajax, но параметры, которые я отправляю с помощью класса AJAX, в классе Action равны нулю.

Это мой класс действий:-

 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>

Пожалуйста, помогите мне.. Где я иду не так...

2 ответа

Решение

Проблема с вашими перехватчиками в struts.xml,

Либо удалите их, либо укажите их правильно. У вас есть переопределение defaultstack Что не является хорошей практикой.

Вы должны сделать так, чтобы имя вашего стека перехватчиков отличалось от стековых стоек.

Например, назовите свой стек как 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

Если вы хотите создать собственный стек перехватчиков и сделать его стеком перехватчиков по умолчанию, вы можете сделать это следующим образом, но поставив "json" перехватчик перед вашим стеком, однако он ничего не даст вам, если вы не отправите данные в формате 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 запрос.

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);
          }
    });
}
Другие вопросы по тегам