2013-06-25 106 views
0

我試圖用struts2-json-plugin來整合struts動作和extjs。 我想從extjs發送json到struts2的動作。這個json包含我的bean的所有字段(UserEntity)。但動作類的setter不會調用。 這裏是我的代碼:extjs和struts集成

UserAction.java

public class UserAction extends BaseAction { 

     private UserEntity userEntity = new UserEntity(); 

     public UserEntity getUserEntity() { 
      return userEntity; 
     } 

     public void setUserEntity(UserEntity userEntity) { 
      this.userEntity = userEntity; 
     } 

     ... 
} 

struts.xml的

 <?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
     "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <package name="default" namespace="/" extends="struts-default,json-default"> 

     <action name="saveOrUpdateUserAction" class="ir.emad.action.UserAction" method="saveOrUpdateUser"> 
      <result name="success" type="json"> 
       <param name="root">userEntity</param> 
      </result> 
     </action> 

    </package> 

</struts> 

和我UserStore.js

Ext.define('AM.store.UserStore', { 
    extend: 'Ext.data.Store', 
    model: 'AM.model.UserModel', 
    autoLoad: true, 

    proxy: { 
     type: 'ajax', 
     api: { 
      read: 'listAllUsersAction', 
      update: 'saveOrUpdateUserAction' 
     }, 
     reader: { 
      type: 'json', 
      root: 'users', 
      successProperty: 'success' 
     }, 
     writer: { 
      type: 'json', 
      root: 'userEntity', 
      successProperty: 'success', 
      encode: true 
     }, 
     contentType: 'application/json' 

    } 
}); 

我的問題是userEntity永不二傳手如果我將setter更改爲下面的代碼,那麼每件事情都很好。但我想直接將json對象設置爲UserEntity bean。

public void setUserEntity(String userEntity){ 
    ... 
} 

任何幫助將不勝感激提前

+0

您沒有在store的代理中指定url。如果你指定它,它會工作... – Hariharan

+0

感謝Hariharan你的答案。實際上我是通過extjs api來完成的。 {更新:saveOrUpdateUserAction}指定url –

回答

0

ExtJS的感謝和Struts是在不同的機器上運行不同的進程。

瀏覽器是否將正確的信息發送到服務器上的正確URL?你可以使用Chrome開發者工具來檢查它。

服務器可以在獨立於ExtJS的正確URL上接受正確的信息嗎?

+0

這是我發佈的json,螢火蟲顯示給我︰{「userEntity」:{「id」:13,「firstName」:「Emad」,「lastName」:「Bayat」,「 nationalCode「:」123「,」username「:」emad「,」age「:」25「}},服務器無法接受這些數據。實際上setter(用UserEntity作爲參數)不會調用。但是,如果我更改setter以獲取數據作爲字符串它工作正常。但我不知道爲什麼用UserBean作爲參數的setter不起作用。 –