1、前台js
Ext.onReady(function() {
var cfg = {};// 组合框配置
cfg['fieldLabel'] = '父菜单';
cfg['url'] = 'comboServer.jsp';
cfg['recordType'] = 'Menu', cfg['fields'] = ['name', 'idno'];
cfg['name'] = 'parentid';
var combo = Ext.combo.createComboBox(cfg);
var form = new Ext.FormPanel( {
frame : true,
applyTo : document.body,
items : [combo]
});
});
2、封装的Ext.combo
/**
* 封装ComboBox,如
* var cfg = {};
* cfg['fieldLabel'] = '父菜单'; 标签
* cfg['url'] ='comboServer.jsp'; 请求的url
* cfg['recordType'] = 'Menu', 记录类型
* cfg['fields'] = ['name','idno'];
* cfg['name'] = 'parentid';字段名称
*/
Ext.combo = {
createComboBox : function(cfg) {
var fields = new Array();
fields = cfg.fields;
var record = Ext.data.Record.create([ {
name : fields[0]
,
}, {
name : fields[1]
}]);
var myReader = new Ext.data.XmlReader( {
totalRecords : "totalNum",
record : cfg.recordType
,
}, record);
var comboStore = new Ext.data.Store( {
autoLoad : true,
url : cfg.url,
reader : myReader
});
var combo = new Ext.form.ComboBox( {
fieldLabel : cfg.fieldLabel,
store : comboStore,
value : '请选择...',
editable : false,// 不可编辑
name : cfg.name,
displayField : fields[0],// 显示的字段
valueField : fields[1],// 实际值字段
triggerAction : 'all'
});
return combo;
}
};
3、comboServer.jsp,用于从数据库中获取要查询的菜单信息,并以xml格式返回
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.dreamoa.sys.BaseParams"%>
<%@page import="com.dreamoa.sys.Loader"%>
<%
BaseParams bp = new BaseParams();
Loader loader = new Loader("menu.xml", "SEL_PARENT_MENU", bp);
response.setContentType("text/xml");
response.getWriter().write(loader.resultsXmlString);
%>
4、hql语句如下,注意一定要查询出所有字段,原因还不清楚。即不能使用如下语句
<query>
<queryName>SEL_PARENT_MENU</queryName>
<queryString>select m.idno,m.name from Menu m where m.parentid='0</queryString>
</query>
只能使用下面的:
<query>
<queryName>SEL_PARENT_MENU</queryName>
<queryString>from Menu m where m.parentid='0'</queryString>
</query>