前台调用代码:
var defineIdStore = new Ext.data.JsonStore({
url : this.rootPath
+ "/busi/templateCfg_getDefineNameData.do",
root : 'root',
fields : [
'defineId',
'defineName' ]
});
header : '表单名称',
width : 150,
dataIndex : 'defineId',
id : "defineId",
editor : new Ext.form.ComboBox({
typeAhead : true,
triggerAction : 'all',
mode : 'remote',
editable : false,
scope : this,
forceSelection : true,
id : "defineId_combo",
hiddenName : 'defineId',// 提交到后台的input的name
store : defineIdStore,
valueField : 'defineId',
displayField : 'defineName',
allowBlank : false,
triggerAction : 'all'
}),
renderer : function(value, cellmeta, record) {
var index = defineIdStore
.find(Ext.getCmp('defineId_combo').valueField,value);
var record = defineIdStore.getAt(index);
var displayText = "";
if (record == null) {
displayText = value;
} else {
displayText = record.data.defineName;//
}
return displayText;
}
后台action类中方法的返回:
public String getDefineNameData() throws IOException{
HttpRequestUtil.printParams(request);
CriteriaExample example = new CriteriaExample();
List<TransDefine> transDefines = transDefineService.selectByExample(example);
StringBuffer sb = new StringBuffer();
sb.append("{\"root\":[");
for(int i=0;i<transDefines.size();i++){
TransDefine define = transDefines.get(i);
if(i==transDefines.size()-1){
sb.append("{\"defineId\":"+define.getDefineId()+",\"defineName\":\""+define.getDefineName()+"\"}");
}else{
sb.append("{\"defineId\":"+define.getDefineId()+",\"defineName\":\""+define.getDefineName()+"\"},");
}
}
sb.append("]}");
System.out.println(sb.toString());
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache,must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.getWriter().print(sb.toString());
response.getWriter().flush();
response.getWriter().close();
return null;
}
虽然这种方法很挫,但是解决了我的问题,希望对初学者能有帮助。