2014-11-14 32 views
2

我想從struts2響應中填充ExtJS4中的組合框。但是這些值沒有填充,組合框是空的。我也嘗試對json數據進行硬編碼,但仍然無效。當我嘗試將actionName追加到URL和執行的動作,沒有錯誤,我可以看到JSON數據..從Struts2響應中填充ExtJS4組合框

"{'rows': [{'id': '1','name': 'Google' }, {'id': '2','name': 'Microsoft' }, {'id': '3','name': 'Yahoo' }]} " 

我有一個表格面板,該面板形式中我有一個組合框項目像這樣:

{ 
    name: 'bName', 
    xtype: 'combobox', 
    displayField: 'name', 
    valueField: 'id', 
    store: new Ext.data.Store({ 
     fields: [{id: 'id'}, {name: 'name'}], 
     autoLoad: true, 
     proxy: { 
      type: 'ajax', 
      url: 'getBookList', 
      reader: { 
       type: 'json', 
       root: 'rows' 
      } 
     } 
    }) 
} 

這是我的struts.xml。我已經使用了JSON-插件和使用參數標籤使得JSON被髮送,因爲它是

<package name="ELM29" extends="struts-default,json-default"> 
    <action name="getBookList" class="com.test.elm.action.Data" 
     method="getBookList"> 
    <result type="json"> 
     <param name="root">data</param> 
    </result> 
    </action> 
</package> 

然後我有Book.java其中我對變量,包括數據作爲吸氣劑設置器變量和getBookList方法,我只是將值分配給數據並返回SUCCESS。

public String getBookList(){ 
    data= "{'rows': [{'id':'1','name':'Google'},{'id':'2','name':'Microsoft'},{'id':'3','name':'Yahoo'}]} "; 
    return ActionSupport.SUCCESS; 
} 

我也嘗試過使用Ext.data.JsonStore但它沒有幫助。問題是由於商店或組合框造成的?代碼中有什麼錯誤?

回答

0

您的JSON is not valid

爲了使其有效,請更換"所有'(單引號)發生(雙引號,然後逃脫:\"

從這個great answer

正式JSON格式不允許字符串用單引號引起來,但是一個實現允許接受它們。

因此,一些圖書館將工作,與其他人不會。

現在我們知道ExtJS是後者之一。

+0

謝謝,我改變了json,但沒有改變輸出......組合沒有得到填充的形式。但是,使用form.submit()..我能夠得到結果對象中的JSON。 – user777777 2014-11-17 08:29:19

+0

你確定你的'url:'getBookList''不需要擴展嗎? – 2014-11-17 12:49:04

+0

很確定,因爲ExtJS和Struts在一起工作得很好。而今天當我嘗試使用相同的代碼時,我意識到問題出在第一次加載商店的時候......我無法找到什麼是錯誤的:( – user777777 2014-11-17 13:27:54