从Struts2响应中填充ExtJS4组合框

时间:2014-11-14 14:13:43

标签: json extjs struts2 extjs4 extjs4.2

我正在尝试从struts2响应中填充ExtJS4中的组合框。但是这些值没有填充,组合框也是空的。我也试过硬编码json数据,但它仍然无法正常工作。当我尝试将actionName附加到URL并执行操作时,没有错误,我可以看到json数据..

    "{'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-plugin并使用了参数标签,以便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,其中我有变量的getter setter,包括作为变量的数据和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,但没有用。问题是由于商店还是组合框造成的?代码有什么问题?

1 个答案:

答案 0 :(得分:0)

您的JSON is not valid

要使其有效,请将所有'(单引号)匹配项替换为"(双引号,然后转义:\"

从此great answer

  

正式的JSON格式不允许单引号中的字符串,但允许实现接受它们。

因此,有些图书馆可以使用,而其他图书馆则无法使用。

现在我们知道ExtJS是后者之一。