【问题标题】:populate ExtJS4 combobox from Struts2 response从 Struts2 响应填充 ExtJS4 组合框
【发布时间】:2015-01-11 23:02:28
【问题描述】:

我正在尝试从 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 方法,我只是为数据赋值并返回成功。

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

我也尝试使用Ext.data.JsonStore,但没有帮助。问题是由于商店还是组合框引起的?代码有什么问题?

【问题讨论】:

    标签: json extjs struts2 extjs4 extjs4.2


    【解决方案1】:

    您的 JSON is not valid

    为使其有效,请将所有出现的'(单引号)替换为"(双引号,然后转义:\"

    来自great answer

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

    所以有些库可以工作,有些则不能。

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

    【讨论】:

    • 谢谢,我更改了 json,但输出没有变化...组合没有填充到表单中。但是,使用 form.submit()..我能够在结果对象中获取 json。
    • 你确定你的url: 'getBookList' 不需要扩展吗?
    • 是的,很确定,因为 ExtJS 和 Struts 可以很好地协同工作。今天,当我尝试相同的代码时,我意识到问题在于加载商店..这是我第一次这样做..并且无法找到到底出了什么问题:(
    • mmok,请随时用(旧)新问题打开一个新问题,这可能与 extJs 无关
    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 2013-06-22
    • 2011-11-20
    • 2013-12-19
    • 2018-01-07
    • 2012-09-11
    • 2011-12-12
    相关资源
    最近更新 更多