2015-03-05 2 views
0

Успешные вызовы геттера. Но клиентская сторона всегда получает нулевые значения.Struts JSON плагин всегда устанавливает нулевое значение

struts2 версия 2.3.15
Struts2 JSON плагин версии 2.3.15

Действие Класс

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. Только после получения ответа они равны нулю. Любая идея, что не так с кодом?

+0

Определен ли вами класс DbConnector? –

+0

@BrijeshBhatt Да. –

+0

plz Опубликовать код для этого метода updateUserInfo –

ответ

2

Я не уверен, почему вы ожидаете, что это сработает, потому что JSONObject возвращается одним из ваших методов. Когда вы используете JSONPlugin, все поля с сигнатурой метода getXXX() будут сопоставлены с JSON. Это то, что вы видите в выпуске, который вы опубликовали. Однако эти поля не заполняются, и поэтому вы получаете нулевое значение для каждого.

Вам придется развернуть объект JSONObject и заполнить эти данные незаполненными, почтовыми и телефонными полями.

+0

Не вызовет ли методы setXXX()? –

+0

Я обновляю один из них, вызывая setStatus(). Почему изменения не отражены в ответе? –

+1

Точно. Хорошо читать для OP: http://stackoverflow.com/a/17149414/1654265 –

Смежные вопросы