Struts JSON 插件总是设置空值
Struts JSON plugin always sets null value
getter方法调用成功。但是客户端总是收到空值。
struts2 version 2.3.15
Struts2 JSON plugin version 2.3.15
动作Class
public class UpdateInfo implements Action{
private String uname;
private String uemail;
private String uphone;
private JSONObject status;
@Override
public String execute() throws Exception {
DbConnector connector = new DbConnector();
HttpServletRequest request = ServletActionContext.getRequest();
JsonFormatter jf = new JsonFormatter();
HashMap<String,String> updates = jf.createUpdateRecords(request);
this.setStatus(connector.updateUserInfo(updates));
return SUCCESS;
}
public void setUname(String name){
this.uname = name;
}
public void setUemail(String email){
this.uemail = email;
}
public void setUphone(String phone){
this.uphone = phone;
}
public void setStatus(JSONObject jb){
this.status = jb;
}
public String getUname(){
return this.uname;
}
public String getUemail(){
return this.uemail;
}
public String getUphone(){
return this.uphone;
}
public JSONObject getStatus(){
return this.status;
}
}
这里updateUserInfo() returns一个JSON对象
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Configuration for the default package. -->
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default,json-default">
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
......................
<action name="updateinfo" class="com.portal.controls.UpdateInfo" method="execute">
<result name="success" type="json"></result>
</action>
</package>
</struts>
要提交的表格
<form method="post" id="uform">
<input type="text" id="uname" name="name" placeholder="Name"><br>
<input type="text" id="uemail" name="email" placeholder="Email"><br>
<input type="text" id="uphone" name="phone" placeholder="Phone"><br>
<input type="submit" id="ibutton" value="Update">
</form>
客户端调用
$.post("updateinfo",$('#uform').serialize(),function(data){
if(data.status === "1"){
alert("updated");
}
else{
alert("Update failed");
}
},"json");
});
收到回复
{"status":{},"uemail":null,"uname":null,"uphone":null}
收到的值始终为空。我检查了 getter 方法是否在 JSON 响应之前被调用并且它正在工作。 class 成员在调用 getter 方法时保存正确的值。只有当收到响应时,它们才为空。知道代码有什么问题吗?
我不确定您为什么希望它起作用,因为您的方法之一返回了 JSON对象。当您使用 JSON 插件时,所有具有 getXXX() 方法签名的字段都将被编组到 JSON。这就是您在发布的输出中看到的内容。但是,这些字段未填充,这就是为什么每个字段都为空值。
您必须打开 JSON 对象并用该数据填充 uname、email 和 phone 字段。
getter方法调用成功。但是客户端总是收到空值。
struts2 version 2.3.15
Struts2 JSON plugin version 2.3.15
动作Class
public class UpdateInfo implements Action{
private String uname;
private String uemail;
private String uphone;
private JSONObject status;
@Override
public String execute() throws Exception {
DbConnector connector = new DbConnector();
HttpServletRequest request = ServletActionContext.getRequest();
JsonFormatter jf = new JsonFormatter();
HashMap<String,String> updates = jf.createUpdateRecords(request);
this.setStatus(connector.updateUserInfo(updates));
return SUCCESS;
}
public void setUname(String name){
this.uname = name;
}
public void setUemail(String email){
this.uemail = email;
}
public void setUphone(String phone){
this.uphone = phone;
}
public void setStatus(JSONObject jb){
this.status = jb;
}
public String getUname(){
return this.uname;
}
public String getUemail(){
return this.uemail;
}
public String getUphone(){
return this.uphone;
}
public JSONObject getStatus(){
return this.status;
}
}
这里updateUserInfo() returns一个JSON对象
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Configuration for the default package. -->
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default,json-default">
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
......................
<action name="updateinfo" class="com.portal.controls.UpdateInfo" method="execute">
<result name="success" type="json"></result>
</action>
</package>
</struts>
要提交的表格
<form method="post" id="uform">
<input type="text" id="uname" name="name" placeholder="Name"><br>
<input type="text" id="uemail" name="email" placeholder="Email"><br>
<input type="text" id="uphone" name="phone" placeholder="Phone"><br>
<input type="submit" id="ibutton" value="Update">
</form>
客户端调用
$.post("updateinfo",$('#uform').serialize(),function(data){
if(data.status === "1"){
alert("updated");
}
else{
alert("Update failed");
}
},"json");
});
收到回复
{"status":{},"uemail":null,"uname":null,"uphone":null}
收到的值始终为空。我检查了 getter 方法是否在 JSON 响应之前被调用并且它正在工作。 class 成员在调用 getter 方法时保存正确的值。只有当收到响应时,它们才为空。知道代码有什么问题吗?
我不确定您为什么希望它起作用,因为您的方法之一返回了 JSON对象。当您使用 JSON 插件时,所有具有 getXXX() 方法签名的字段都将被编组到 JSON。这就是您在发布的输出中看到的内容。但是,这些字段未填充,这就是为什么每个字段都为空值。
您必须打开 JSON 对象并用该数据填充 uname、email 和 phone 字段。