java - Struts JSON 插件总是设置 null 值

标签 java jsp servlets struts2

getter 方法已成功调用。但客户端总是收到空值。

struts2 version 2.3.15
Struts2 JSON plugin version 2.3.15

Action 类

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() 返回一个 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 响应之前被调用并且它正在工作。当调用 getter 方法时,类成员保存正确的值。仅当收到响应时,它们才为空。知道代码有什么问题吗?

最佳答案

我不确定您为什么期望它起作用,因为您的方法之一返回了 JSONObject。当您使用 JSONPlugin 时,所有具有 getXXX() 方法签名的字段都将被编码为 JSON。这就是您在发布的输出中看到的内容。但是,这些字段未填充,这就是为什么您会得到每个字段的空值。

您必须解开 JSONObject 并使用该数据填充 uname、电子邮件和电话字段。

关于java - Struts JSON 插件总是设置 null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28871523/

相关文章:

java - 如何获取 java.sql.Time 表示的毫秒数?

java - Ubuntu 10.04 上的 Tomcat6 和审核对象

java - Apache Tomcat - 读取生成的旧文件

java - 在 Struts 2 中使用 OGNL 检查 "top"值的成员资格

java - 如何识别从多个提要中收集的重复项并将其链接到数据库中

java - Websphere liberty 配置文件错误 : 404 SRVE0190E

java - 如何逐页获取具有整个文件内容的base64的PDF文件内容?

java - 如何在CXF中处理来自外部系统的SOAP故障?

java - 了解 servlet 中的 out.println

javascript - 在 javascript 确认上单击否时停止将页面转发到 servlet