2014-11-14 5 views
2

Я пытаюсь заполнить выпадающий список в ExtJS4 из ответа struts2. Но значения не заполняются, а поле со списком пусто. Я также пытался жестко кодировать данные json, но все же он не работает. Когда я пытаюсь присоединить ActionName к URL и выполнить действие, нет никакой ошибки, и я могу видеть данные JSon ..заполнить ExtJS4 combobox от ответа Struts2

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

У меня есть форма панели в виде панели у меня есть элемент управления ComboBox например:

{ 
    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, где у меня есть геттер сеттер для переменных, включая данные как variable и метод getBookList, где я просто присваиваю значение данным и возвращающ УСПЕХ.

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 в объекте result. – user777777

+0

Вы уверены, что ваш 'url: 'getBookList' не нуждается в расширении? –

+0

Да, конечно, потому что ExtJS и Struts отлично работают вместе. И сегодня, когда я пытался использовать один и тот же код, я понял, что проблема связана с загрузкой магазина ..., который я делаю в первый раз ... и не могу найти, что именно не так :( – user777777

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