1。ComboBox加载数据之后,ComboBox里面的值跑位,不能正确对应到ComboBox里面。
原因:因为要传name的值到服务器端,使用到了隐藏属性hiddeName来传值,hiddenName的名是要和name一样的。如果id和name设置为相同的,就会不能正确对应。所以,comboBox的id和name 不能设置一样
new Ext.form.ComboBox({
id:"comboId",
name:"comboName",
hiddenName:"comboName"
});
2。 第二个问题是明明已经加载了数据之后store里面也有值,确没有再ComboBox里面显示,这个你就要注意你的ComboBox里面有没有设置valueField 和 displayField, valueField绑定到当前底层数据,相当于它的id,displayValue,绑定到当前底层数据对应的名词,顾名思义也就是显示出来的值。还要注意一下,它的映射是否也有写,field 里面是否写正确了。如果这两个属性没有,那就是值怎么也显示不出来的。还有一点是,得到的值从服务器端传回来,一定要记得有response.getWrite().print(json格式值); 有时前台都写正确了,但是还是没值,那就是没有将值传到前台
store : new Ext.Data.Store({
proxy: new Ext.Data.httpProxy({}),
reader:new Ext.data.JsonReader({});
field:["valueid","displayName"]
});
new Ext.form.ComboBox({
id:"comboId",
name:"comboName",
hiddenName:"comboName",
store:store
valueField:"valueid" , //要跟field里面对应,不然不能正确匹配
displayField:"dispalyField"
});
3. 获取ComboBox手动输入的值。手动输入的值是没有完全设置到ComboBox中value里面的,所以当我们去获取的时候,得到都是一个空字符串。
listeners : {
render : function(f) {
f.el.on('keyup', function(e) {
f.setValue(f.getRawValue());
vipStore.proxy = new Ext.data.HttpProxy({
url : "vip_realtimeVipName.action?vipID="
+ f.getRawValue()
});
vipStore.load();
});
原因:因为要传name的值到服务器端,使用到了隐藏属性hiddeName来传值,hiddenName的名是要和name一样的。如果id和name设置为相同的,就会不能正确对应。所以,comboBox的id和name 不能设置一样
new Ext.form.ComboBox({
id:"comboId",
name:"comboName",
hiddenName:"comboName"
});
2。 第二个问题是明明已经加载了数据之后store里面也有值,确没有再ComboBox里面显示,这个你就要注意你的ComboBox里面有没有设置valueField 和 displayField, valueField绑定到当前底层数据,相当于它的id,displayValue,绑定到当前底层数据对应的名词,顾名思义也就是显示出来的值。还要注意一下,它的映射是否也有写,field 里面是否写正确了。如果这两个属性没有,那就是值怎么也显示不出来的。还有一点是,得到的值从服务器端传回来,一定要记得有response.getWrite().print(json格式值); 有时前台都写正确了,但是还是没值,那就是没有将值传到前台
store : new Ext.Data.Store({
proxy: new Ext.Data.httpProxy({}),
reader:new Ext.data.JsonReader({});
field:["valueid","displayName"]
});
new Ext.form.ComboBox({
id:"comboId",
name:"comboName",
hiddenName:"comboName",
store:store
valueField:"valueid" , //要跟field里面对应,不然不能正确匹配
displayField:"dispalyField"
});
3. 获取ComboBox手动输入的值。手动输入的值是没有完全设置到ComboBox中value里面的,所以当我们去获取的时候,得到都是一个空字符串。
listeners : {
render : function(f) {
f.el.on('keyup', function(e) {
f.setValue(f.getRawValue());
vipStore.proxy = new Ext.data.HttpProxy({
url : "vip_realtimeVipName.action?vipID="
+ f.getRawValue()
});
vipStore.load();
});
}
- Ext文件
- var Ptype=new Ext.data.SimpleStore({
- fields:['value', 'text'],
- data:[['01','咨询类'],['02','软件类'],['03','其他']]
- });
- var combo=new Ext.form.ComboBox({
- id:'depart',
- name:'Pptype',
- fieldLabel:'所属部门',
- emptyText:'请选择',
- anchor:'95%',
- //hiddenName:'depart_com',
- mode : 'local',
- editable: false,
- triggerAction: 'all',
- //readOnly : true,
- store:Ptype,
- valueField : 'value', //值
- displayField : 'text' //显示下拉框内容
- //allowBlank : false//不允许为空
- //blankText:'请选择部门'
- });
- java文件
- public List selectDepatCom(){
- List list=new ArrayList();
- String sql="select * from depart";
- DBcon dbcon=new DBcon();
- try {
- PreparedStatement ps=dbcon.con.prepareStatement(sql);
- ResultSet rs=ps.executeQuery();
- while(rs.next()){
- DepartBean db=new DepartBean();
- db.setDepid(rs.getInt(1));
- db.setDepname(rs.getString(2));
- list.add(db);
- }
- rs.close();
- ps.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- dbcon.closeDBcon();
- }
- return list;
- }
最后,如果你的ComboBox控件,采用远程服务器取数据的话, mode:要采用remote, 当出现数据显示不了的话,你也可能和我犯了一样愚蠢的错误, 没有为ComboBox控件指定 triggerAction, 因为当下拉框被激活了之后,要判断该值。(all: 显示所有数据不过滤, query:过滤数据,如果是远程的话,会调用查询)