#ajax #json #struts2 #struts2-json-plugin
#ajax #json #struts2 #struts2-json-плагин
Вопрос:
Я пытаюсь отправить AJAX-запрос в действие, в котором я отправляю один параметр со страницы JSP. Итак, мой класс действий получает запрос Ajax, но параметры, которые я отправляю с классом AJAX, находятся null
в 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>
Ответ №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
Комментарии:
1. Спасибо @parth … это работает! Можете ли вы предоставить мне какую-нибудь учебную ссылку для справки
2. да, конечно… для struts2 нажмите здесь , а для примера json смотрите Этот пример .. И если вы новичок в stack overflow, я предложу вам узнать, как принять ответ, нажмите здесь
3.@Hitesh Обратитесь к этой ссылке для json и struts2. Технологии.learnerandtutor.com/…tech .learnerandtutor.com /…
Ответ №2:
Если вы хотите создать пользовательский стек перехватчиков и сделать его стеком перехватчиков по умолчанию, вы можете сделать это следующим образом, но поместить 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);
}
});
}