[英]How to use JSON-RPC in Struts 2
我将 Struts2-json-plugin-2.3.16 与框架的相同版本一起使用。 我收到来自 JSON 的空响应。
JavaScript/jQuery 函数。
var timeout;
var request;
function getUsers()
{
if(!request)
{
request = $.ajax({
datatype:"json",
type: "GET",
contentType: "application/json; charset=utf-8",
url: "testJsonAction.action",
success: function(response)
{
var user= response.user;
alert(user);
},
complete: function()
{
timeout = request = null;
},
error: function(request, status, error)
{
if(status!=="timeout"&&status!=="abort")
{
alert(status+" : "+error);
}
}
});
timeout = setTimeout(function() {
if(request)
{
request.abort();
alert("The request has been timed out.");
}
}, 30000);
}
}
当单击按钮时调用此函数。
<s:form namespace="/admin_side" action="Test" validate="true" id="dataForm" name="dataForm">
<input type="button" name="btnUser" id="btnUser" value="Click" onclick="getUsers();"/>
</s:form>
动作类:
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value = "json-default")
public final class TestAction extends ActionSupport {
private User user;
private static final long serialVersionUID = 1L;
public TestAction() {
}
@JSON(name = "user")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Action(value = "testJsonAction",
results = {
@Result(type = "json", name = ActionSupport.SUCCESS, params = {"enableSMD", "true", "enableGZIP", "true", "excludeNullProperties", "true"})})
public String executeAction() throws Exception {
try {
user = new User();
user.setName("Tiny");
user.setDob(new SimpleDateFormat("dd-MMM-YYYY").parse("29-Feb-2000"));
user.setLocation("India");
} catch (ParseException ex) {
Logger.getLogger(TestAction.class.getName()).log(Level.SEVERE, null, ex);
}
return ActionSupport.SUCCESS;
}
@Action(value = "Test",
results = {
@Result(name = ActionSupport.SUCCESS, location = "Test.jsp"),
@Result(name = ActionSupport.INPUT, location = "Test.jsp")},
interceptorRefs = {
@InterceptorRef(value = "defaultStack", params = {"params.acceptParamNames", "", "params.excludeMethods", "load", "validation.validateAnnotatedMethodOnly", "true"})})
public String load() throws Exception {
return ActionSupport.SUCCESS;
}
}
User
类:
public class User
{
private String name;
private Date dob;
private String location;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
TestAction
类中的executeAction()
方法被调用,当给定的按钮被点击但我没有得到用户对象作为 JSON 响应时。 它似乎总是空的。
这里缺少什么? 除了Struts2-json-plugin-2.3.16
库之外,它是否还需要其他库?
在这种情况下,使用直接链接http://localhost:8080/TestStruts/admin_side/testJsonAction.action
,我得到以下字符串。
{"methods":[],"serviceType":"JSON-RPC","serviceUrl":"\/TestStruts\/admin_side\/testJsonAction.action","version":".1"}
如果您需要在 Struts2 中使用 JSON-RPC,您应该怎么做:
配置返回 JSON-RPC 服务的操作
@Action(value = "testJsonAction",
results = @Result(type = "json", params = {"enableSMD", "true"}),
interceptorRefs = @InterceptorRef(value="json", params={"enableSMD", "true"}))
public String executeAction() throws Exception {
return SUCCESS;
}
创建方法
@SMDMethod
public User getUser() {
user = new User();
user.setName("Tiny");
user.setLocation("India");
try {
user.setDob(new SimpleDateFormat("dd-MMM-YYYY").parse("29-Feb-2000"));
} catch (ParseException ex) {
Logger.getLogger(TestAction.class.getName()).log(Level.SEVERE, null, ex);
}
return user;
}
现在,您需要一个 JSON-RPC 客户端来发出请求,或者尝试$.ajax
<s:url var="testJsonUrl" action="testJsonAction"/>
<script type="text/javascript">
$(document).ready(function(){
$("#btnUser").click(function(){
$.ajax({
type:"POST",
url: "<s:property value='#testJsonUrl'/>",
dataType:"json",
data: JSON.stringify({jsonrpc:'2.0', method:'getUser', id:'jsonrpc'}),
contentType: "application/json-rpc; charset=utf-8",
success: function(response) {
var user= response.result;
alert(JSON.stringify(user));
}
});
});
});
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.