问题描述:
   1.Combobox组件远程加载失败,load之后没有任何选项,貌似是proxy获取不了Action传来的数据。
   2.使用HttpProxy构造方法创建一个代理对象时,其构造方法需要一个Connection类型的参数,为什么我在按照Connection的配置项配置完成之后,页面加载前后listeners中的两个事件触发不了?
代码如下:
前台ExtJs代码:
Ext.onReady(function(){

var httpProxy  = new Ext.data.HttpProxy({
url:'httpComboboxAction.action',
listeners:{
requestcomplete:function(conn,response,options){
alert(response.responseText());
},
beforerequest:function(conn,options){
alert(111);
}
}
});
var httpRecord = new Ext.data.Record.create([
{name:'id',type:'int',mapping:'id'},
{name:'cname',type:'string',mapping:'cname'}
]);
var jsonReader = new Ext.data.JsonReader({},httpRecord); var httpStore = new Ext.data.Store({
proxy:httpProxy,
reader:jsonReader
});

var httpCombobox  = new Ext.form.ComboBox({
store:httpStore,
mode:'remote',
renderTo:'httpCombobox',
valueField:'id',
displayField:'cname',
triggerAction:'all'
});
});后台Action代码:package org.action.extjstest;import java.io.IOException;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class ComboboxAction extends ActionSupport{ public String httpDataToCombobox() throws IOException{
System.out.println("11111111");
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
// response.setCharacterEncoding("utf-8");
response.getWriter().write(
"[{id:1,cname:北京},{id:2,cname:青岛},{id:3,cname:济南}]"
);
return null;
}
}

解决方案 »

  1.   

    var dataStore = new Ext.data.JsonStore({ url : "xxx",
        fields : ["id", "text"]
                    });
      
    var combobox = new Ext.form.ComboBox({
                store:dataStore,
        valueField :"id",     
        displayField: "text",     
        mode:'remote',    
        forceSelection: true,
        triggerAction: 'all'                       
           });
    combobox.getStore().load();
      

  2.   

    var dataStore = new Ext.data.JsonStore({ url : "xxx",
    fields : ["id", "cname"]
      });
      
    var combobox = new Ext.form.ComboBox({
    store:dataStore,
    valueField :"id",   
    displayField: "cname",   
    mode:'remote',   
    forceSelection: true,
    triggerAction: 'all'   
    });
    combobox.getStore().load();
      

  3.   

    response.getWriter().write(
                    "[{id:1,cname:北京},{id:2,cname:青岛},{id:3,cname:济南}]"
    ); 这个必须转化成json字符串的形式输出的,你的json格式也不对
      

  4.   

    错误的原因是action中输出的json字符串没加引号,导致json串传到前台combobox的reader解析不了,不知道你是这个意思吗?除此之外代码没有任何问题,你提供的方法,在ext2中没找到相应的配置项field,但是我总觉得可读性不如分开定义record和proxy