提问人:s.surya Prakash 提问时间:11/6/2022 最后编辑:Roman Cs.surya Prakash 更新时间:10/2/2023 访问量:223
来自 Struts 2 的 JSON 响应不适用于 AJAX
JSON Response from Struts 2 not working with AJAX
问:
我正在使用 Ajax 从 Struts 2 获得成功响应,但它最终给出了对错误函数的响应,并在 Ajax 中解析 JSON 的解析错误。
下面是我的代码。
操作类 - PropertyTesting.java
import java.io.IOException;
import org.apache.struts2.ServletActionContext;
import org.json.simple.JSONObject;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class PropertyTesting extends ActionSupport
{
public String execute()
{
JSONObject obj = new JSONObject();
obj.put("Name", "PersonName");
obj.put("ID", "PersonID");
try {
ServletActionContext.getResponse().getWriter().write(obj.toJSONString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
}
JSP 页面 - PropertyTesting.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Property Testing</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript">
function invokeAjax()
{
$.ajax(
{
type:"POST",
url:"PropertyTesting",
dataType:"json",
success: function(responseText)
{
console.log(responseText);
},
error: function(errorResponse)
{
console.log(errorResponse);
}
});
}
</script>
</head>
<body>
<button type="button" onclick="invokeAjax()" >Submit</button>
</body>
</html>
Struts.xml
<struts>
<constant name="struts.devMode" value="true"/>
<package name="WebTesting" extends="json-default">
<action name="PropertyTesting" class="org.testing.PropertyTesting" >
<result type="json"></result>
</action>
</package>
</struts>
而且,如果我使用 Servlet 做同样的事情,它会给我提供使用 Struts 的确切结果,只会给出此类问题。
答:
1赞
Roman C
11/10/2022
#1
JSONObject
当您返回 JSON 结果时,有点问题。默认情况下,它会序列化操作。由于没有要序列化的属性,因此应创建属性。
Struts2 中的操作不是单例的,因此您不必担心创建属性。
public class PropertyTesting extends ActionSupport
{
Map obj;
public Map getJSON(){
return obj;
}
public String execute()
{
obj = new HashMap();
obj.put("Name", "PersonName");
obj.put("ID", "PersonID");
return SUCCESS;
}
}
评论
0赞
s.surya Prakash
11/10/2022
感谢您的回答,有没有办法像儿子一样在响应编写器中编写它,以便更轻松地编写我想要的 JSONString。ServletActionContext.getResponse().getWriter().write(obj.toJSONString());
1赞
Roman C
11/11/2022
唯一的方法是返回结果 NONE。
0赞
Roman C
11/17/2022
如果这个答案对你有帮助,那么你应该把它标记为接受。该复选框位于答案的左侧。
评论