ExtJS3.x+Struts2.1.8
以前曾经写过一个类似的,但是看了留言说数据怎么怎么传不对,那是因为如果你仅仅只会依葫芦画瓢,那不对是正常的,好了,我今天就再写一个,你依葫芦画瓢一定可以画出来的玩意。呵呵。OK,言归正传先从实体开始说,我这里做例子,依然用最简单的来。
@Entity
@Table(name = " t_fieldcolumn " )
public class FieldColumn {
@Id()
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
private String value;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
实体类的定义完成后,接着生成相应的service包括接口IFieldColumnService和其实现FieldColumnService
@Table(name = " t_fieldcolumn " )
public class FieldColumn {
@Id()
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
private String value;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
我只贴接口,具体实现嘛,自己去弄吧,嘻嘻
public
interface
IFieldColumnService
extends
EntityDao
<
FieldColumn, String
>
{
public Page getAllFieldColumnList(int start,int limit,String sort,String dir,String name);
List<FieldColumn> getFilterList();
int getFilterCount();
public void addFieldColumn(FieldColumn field);
public void updateFieldColumn(FieldColumn filed);
public void getFieldColumnById(Long id);
public void deleteFieldColumn(Long id);
}
现在到Action了,关于struts2我就不多说了,现在已经很普及了,这里我强调的一点就是,我和原先的做法一样,还是将数据保存在一个名叫result.jsp中的jsonString变量中,有问题可以参见我原来的那篇文章,
public Page getAllFieldColumnList(int start,int limit,String sort,String dir,String name);
List<FieldColumn> getFilterList();
int getFilterCount();
public void addFieldColumn(FieldColumn field);
public void updateFieldColumn(FieldColumn filed);
public void getFieldColumnById(Long id);
public void deleteFieldColumn(Long id);
}
@Controller
@Results( {
@Result(name = "field", location = "/WEB-INF/page/field.jsp", type = "dispatcher"),
@Result(name = "success", location = "/WEB-INF/page/result.jsp", type = "dispatcher"),
@Result(name = "fail", location = "/index.jsp", type = "dispatcher")
} )
public class FieldColumnAction extends BaseActionSupport {
private static final long serialVersionUID = 1L;
@Autowired
@Qualifier("fieldColumnJdbcService")
private IFieldColumnService fieldColumnService;
private int limit=20;
private int start=1;
private String dir="";
private String sort="";
private String fieldId="";
private String jsonString="";
private String delData="";
private String fieldName = "";
private String fieldValue = "";
private String filterName = "";
/** *//**
* 查询功能
* @return
*/
@Action("/getFieldList")
public String getFieldColumnList()
{
Page page = new Page();
page = fieldColumnService.getAllFieldColumnList(start, limit, sort, dir, filterName);
if(page.getTotalCount()!=0)
{
List<FieldColumn> result = (List<FieldColumn>)page.getResult();
StringBuilder sb = new StringBuilder("{success:true,totalCount:");
sb.append(page.getTotalCount());
sb.append(",results:");
sb.append(FlexJsonUtils.getJsonString(result, null,
new String[] { "class" }, null));
sb.append("}");
jsonString = sb.toString();
}
else
{
jsonString = "{success:true,totalCount:0,results:[]}";
}
return SUCCESS;
}
}
/** */ /**
* 进入管理页面
* @return
*/
@Action( " /fieldcolumn " )
public String getFieldIndex()
{
return "field";
}
/** */ /**
* 根据field id 获取详细内容
* @return
*/
@Action( " /getField " )
public String getFieldInfo()
{
FieldColumn field = new FieldColumn();
field = fieldColumnService.get(fieldId);
if(field!=null)
{
StringBuilder sb = new StringBuilder();
sb.append("{success:true,");
sb.append("result:");
sb.append(FlexJsonUtils.getJsonString(field, null, new String[]{"class"}, null));
sb.append("}");
jsonString = sb.toString();
}
else
{
jsonString="{success:false,msg:'load faild!'}";
}
return SUCCESS;
}
/** */ /**
* 添加字段
* @return
*/
@Action( " /addField " )
public String addField()
{
FieldColumn field = new FieldColumn();
field.setName(fieldName);
field.setValue(fieldValue);
fieldColumnService.save(field);
jsonString="{success:true,msg:'add success!'}";
return SUCCESS;
}
/** */ /**
* 获取类别名称
* @return
*/
@Action( " /getFieldNameList " )
public String getFieldNameList()
{
List<FieldColumn> result = new ArrayList<FieldColumn>();
FieldColumn fc = new FieldColumn();
fc.setName("All Field Results");
fc.setValue("");
fc.setId("");
result.add(fc);
result.addAll(fieldColumnService.getFilterList());
int total = fieldColumnService.getFilterCount()+1;
jsonString = "{success:true,totalCount:"+total+",results:"+FlexJsonUtils.getJsonString(result, null,new String[] { "class","id","value" }, null)+"}";
return SUCCESS;
}
/** */ /**
* 更新功能
* @return
*/
@Action( " /updateField " )
public String updateField()
{
FieldColumn field = new FieldColumn();
field = fieldColumnService.get(fieldId);
if(!fieldName.equals(""))
{
field.setName(fieldName);
}
field.setValue(fieldValue);
fieldColumnService.merge(field);
jsonString="{success:true,msg:'update success!'}";
return SUCCESS;
}
/** */ /**
* 删除功能
* @return
*/
@Action( " /delField " )
public String delField()
{
if(delData.indexOf(",")<0)
{
fieldColumnService.delete(delData.trim());
}
else
{
String[] ids = delData.split(",");
for(int i=0;i<ids.length;i++)
{
fieldColumnService.delete(ids[i].trim());
}
}
jsonString="{success:true,msg:'delete success!'}";
return SUCCESS;
}
public int getLimit() {
return limit;
}
public void setLimit( int limit) {
this.limit = limit;
}
public int getStart() {
return start;
}
public void setStart( int start) {
this.start = start;
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getFieldId() {
return fieldId;
}
public void setFieldId(String fieldId) {
this.fieldId = fieldId;
}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
this.jsonString = jsonString;
}
public String getDelData() {
return delData;
}
public void setDelData(String delData) {
this.delData = delData;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getFieldValue() {
return fieldValue;
}
public void setFieldValue(String fieldValue) {
this.fieldValue = fieldValue;
}
public String getFilterName() {
return filterName;
}
public void setFilterName(String filterName) {
this.filterName = filterName;
}
}
如果你们对json的封装感到疑惑,请看我的flexJson那篇文章,我就是用哪个工具进行数据的json格式化的,呵呵,好了,现在到最前面了,那么首先在一个JSP页面中要把ext相关的文件都要引入
@Results( {
@Result(name = "field", location = "/WEB-INF/page/field.jsp", type = "dispatcher"),
@Result(name = "success", location = "/WEB-INF/page/result.jsp", type = "dispatcher"),
@Result(name = "fail", location = "/index.jsp", type = "dispatcher")
} )
public class FieldColumnAction extends BaseActionSupport {
private static final long serialVersionUID = 1L;
@Autowired
@Qualifier("fieldColumnJdbcService")
private IFieldColumnService fieldColumnService;
private int limit=20;
private int start=1;
private String dir="";
private String sort="";
private String fieldId="";
private String jsonString="";
private String delData="";
private String fieldName = "";
private String fieldValue = "";
private String filterName = "";
/** *//**
* 查询功能
* @return
*/
@Action("/getFieldList")
public String getFieldColumnList()
{
Page page = new Page();
page = fieldColumnService.getAllFieldColumnList(start, limit, sort, dir, filterName);
if(page.getTotalCount()!=0)
{
List<FieldColumn> result = (List<FieldColumn>)page.getResult();
StringBuilder sb = new StringBuilder("{success:true,totalCount:");
sb.append(page.getTotalCount());
sb.append(",results:");
sb.append(FlexJsonUtils.getJsonString(result, null,
new String[] { "class" }, null));
sb.append("}");
jsonString = sb.toString();
}
else
{
jsonString = "{success:true,totalCount:0,results:[]}";
}
return SUCCESS;
}
}
/** */ /**
* 进入管理页面
* @return
*/
@Action( " /fieldcolumn " )
public String getFieldIndex()
{
return "field";
}
/** */ /**
* 根据field id 获取详细内容
* @return
*/
@Action( " /getField " )
public String getFieldInfo()
{
FieldColumn field = new FieldColumn();
field = fieldColumnService.get(fieldId);
if(field!=null)
{
StringBuilder sb = new StringBuilder();
sb.append("{success:true,");
sb.append("result:");
sb.append(FlexJsonUtils.getJsonString(field, null, new String[]{"class"}, null));
sb.append("}");
jsonString = sb.toString();
}
else
{
jsonString="{success:false,msg:'load faild!'}";
}
return SUCCESS;
}
/** */ /**
* 添加字段
* @return
*/
@Action( " /addField " )
public String addField()
{
FieldColumn field = new FieldColumn();
field.setName(fieldName);
field.setValue(fieldValue);
fieldColumnService.save(field);
jsonString="{success:true,msg:'add success!'}";
return SUCCESS;
}
/** */ /**
* 获取类别名称
* @return
*/
@Action( " /getFieldNameList " )
public String getFieldNameList()
{
List<FieldColumn> result = new ArrayList<FieldColumn>();
FieldColumn fc = new FieldColumn();
fc.setName("All Field Results");
fc.setValue("");
fc.setId("");
result.add(fc);
result.addAll(fieldColumnService.getFilterList());
int total = fieldColumnService.getFilterCount()+1;
jsonString = "{success:true,totalCount:"+total+",results:"+FlexJsonUtils.getJsonString(result, null,new String[] { "class","id","value" }, null)+"}";
return SUCCESS;
}
/** */ /**
* 更新功能
* @return
*/
@Action( " /updateField " )
public String updateField()
{
FieldColumn field = new FieldColumn();
field = fieldColumnService.get(fieldId);
if(!fieldName.equals(""))
{
field.setName(fieldName);
}
field.setValue(fieldValue);
fieldColumnService.merge(field);
jsonString="{success:true,msg:'update success!'}";
return SUCCESS;
}
/** */ /**
* 删除功能
* @return
*/
@Action( " /delField " )
public String delField()
{
if(delData.indexOf(",")<0)
{
fieldColumnService.delete(delData.trim());
}
else
{
String[] ids = delData.split(",");
for(int i=0;i<ids.length;i++)
{
fieldColumnService.delete(ids[i].trim());
}
}
jsonString="{success:true,msg:'delete success!'}";
return SUCCESS;
}
public int getLimit() {
return limit;
}
public void setLimit( int limit) {
this.limit = limit;
}
public int getStart() {
return start;
}
public void setStart( int start) {
this.start = start;
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getFieldId() {
return fieldId;
}
public void setFieldId(String fieldId) {
this.fieldId = fieldId;
}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
this.jsonString = jsonString;
}
public String getDelData() {
return delData;
}
public void setDelData(String delData) {
this.delData = delData;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getFieldValue() {
return fieldValue;
}
public void setFieldValue(String fieldValue) {
this.fieldValue = fieldValue;
}
public String getFilterName() {
return filterName;
}
public void setFilterName(String filterName) {
this.filterName = filterName;
}
}
<%
@ page language="java" pageEncoding="UTF-8"
%>
<% @include file="/common/page/taglibs.jsp" %>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" >
< title > FieldColumn </ title >
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/ext/resources/css/ext-all.css" />
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/tasks.css" />
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/yeoougrid.css" /> <!--这个是自定义表格的css文件,其实通用的就够了-->
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/msg.css" />
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/RowEditor.css" /><!--由于我设置了双击行能进行相应字段的更新操作,所以这个必须引入-->
< script type ="text/javascript" src ="${ctx}/common/scripts/ext/ext-base.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/ext/ext-all.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/util/JsonUtil.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/util/RowEditor.js" ></ script ><!--由于我设置了双击行能进行相应字段的更新操作,所以这个必须引入-->
< script type ="text/javascript" src ="${ctx}/common/scripts/util/ExtendFormat.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/util/Ext.ux.plugins.js" ></ script ><!--同上,是grid的插件,这个当然也是需要的-->
< script type ="text/javascript" src ="${ctx}/resource/scripts/field.js" ></ script ><!--这个就是我们要写的文件了-->
</ head >
< body >
</ body >
</ html >
我们现在就进入js文件中
<% @include file="/common/page/taglibs.jsp" %>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" >
< title > FieldColumn </ title >
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/ext/resources/css/ext-all.css" />
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/tasks.css" />
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/yeoougrid.css" /> <!--这个是自定义表格的css文件,其实通用的就够了-->
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/msg.css" />
< link rel ="stylesheet" type ="text/css" href ="${ctx}/resource/css/field/RowEditor.css" /><!--由于我设置了双击行能进行相应字段的更新操作,所以这个必须引入-->
< script type ="text/javascript" src ="${ctx}/common/scripts/ext/ext-base.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/ext/ext-all.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/util/JsonUtil.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/util/RowEditor.js" ></ script ><!--由于我设置了双击行能进行相应字段的更新操作,所以这个必须引入-->
< script type ="text/javascript" src ="${ctx}/common/scripts/util/ExtendFormat.js" ></ script >
< script type ="text/javascript" src ="${ctx}/common/scripts/util/Ext.ux.plugins.js" ></ script ><!--同上,是grid的插件,这个当然也是需要的-->
< script type ="text/javascript" src ="${ctx}/resource/scripts/field.js" ></ script ><!--这个就是我们要写的文件了-->
</ head >
< body >
</ body >
</ html >
/**/
/**
* Field Column Manager
* @author kensin
*/
var searchName = "" ;
Ext.onReady( function () {
Ext.BLANK_IMAGE_URL = './resource/ext/resources/images/default/s.gif';
Ext.QuickTips.init();
var id = 1;
var contentPanel, fpanel;//添加,更新的面板
var objectGrid;//表格组件
var selectRecord;//选择的记录
var objectStore;//数据仓库组件
var cbsm;//行组件
var actions;//添加,更新的动作
var tabPanel;
var dsFieldName;
var currentValue="";
initView();//载入视图
} );
var pageSize = 50 ;
var addWin,updWin; // 窗体
// 载入视图方法
function initView() {
new Ext.Viewport({
layout:'border',
items:initGrid()//将表格在视图中展现
});
}
// 初始化视图方法
function initGrid() {
//面板中会操作的对象属性
var idName = new Array('fieldName','fieldValue');
//对象的解析器
var roleReader = new Ext.data.JsonReader({
totalProperty: 'totalCount',
root: 'results',
successProperty:'success',
idProperty:'id',
//映射关系
fields: [
{name: 'id', type: 'string',mapping:'id'},
{name: 'name', type: 'string',mapping:'name'},
{name: 'value', type: 'string',mapping:'value'}
]
});
//下拉列表仓库
dsFieldName = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url:'./getFieldNameList.do'
}),
reader: new Ext.data.JsonReader({
root: 'results',
totalProperty: 'totalCount',
successProperty:'success'
}, [
{name: 'name', mapping: 'name'}
])
});
//表格数据仓库
objectStore = new Ext.data.GroupingStore({
reader:roleReader,//以此方式来解析数据
proxy:new Ext.data.HttpProxy //请求并返回数据({url: './getFieldList.do',method:'POST'}),
remoteSort:true,
groupField:'name',//以name进行group by
sortInfo:{},
//当双击行时对更新操作进行监听,并将当前值和修改值显示给用户,以便确认更新
listeners: {
'update': function(thiz, record, operation){
var member = thiz.getAt(thiz.indexOf(record)).data;
if(operation == Ext.data.Record.EDIT){
Ext.MessageBox.show
({title:'<Strong>Modify Record</Strong>',
msg:'Are you sure want to modify this record? <br>Current Value:'+currentValue+'<br>New Value:'+member.value,
width:350,
height:100,
buttons:Ext.MessageBox.YESNO,
fn:function(btn){
if (btn == "yes") {
//确认则更新 Ext.Ajax.request({
url: './updateField.do',//更新请求的URL
method:'post',
params: {
fieldId:member.id,
fieldName:member.name,
fieldValue:member.value},
success:function(response, opts) {
Ext.Msg.alert('Success', 'You have modified the current record');
thiz.commitChanges();
//更新完毕后显示最新的数据 objectStore.load({
params: {
filterName:searchName,
start: objectGrid.getBottomToolbar().cursor,
limit: pageSize
}
});},
failure:function(response, opts) {
Ext.Msg.alert('Faild','Update Faild');}
});
}
}
});
}
}
}
});
// 初始化显示数据
objectStore.load( {
params: {
start: 0,
filterName:searchName,
limit: pageSize
}
} );
var rn = new Ext.grid.RowNumberer();
// 设置双击可进行更新的属性
var editor = new Ext.ux.grid.RowEditor( {
saveText: 'Update',
cancelText:'Cancel',
listeners:{
beforeedit:function(rowedit,index){
var m = objectGrid.getSelectionModel().getSelections();
currentValue = m[0].get('value');
}
}
} );
cbsm = new Ext.grid.CheckboxSelectionModel();
var rn = new Ext.grid.RowNumberer();
// 表格组件
objectGrid = new Ext.grid.GridPanel( {
loadMask: true,
ds: objectStore,
columns: [
rn, //行号列
cbsm, //CheckBox选择列
{id:'id',header: 'fieldId', hidden:true, hideable:false, sortable: true,
dataIndex: 'id'},
{header: 'Field Name', hidden:true,fixed:false,hideable:false, sortable: true,
dataIndex: 'name'},
{header: 'Field Text', fixed:false,hideable:true, sortable: true,editor:{xtype: 'textfield',allowBlank: false },
dataIndex: 'value'}
],
sm: cbsm,
plugins:[editor],//将双击可修插件定义
view: new Ext.grid.GroupingView({
forceFit: true,
showGroupName: false,
enableNoGroups: true,
hideGroupedColumn: false,
groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "rows" : "rows"]})'
}),
//表格最下栏显示信息
bbar: new Ext.PagingToolbar({
pageSize: pageSize,
store: objectStore,
displayInfo: true,
displayMsg: 'View {0}-{1} row / Total {2} rows',
refreshText:'Refresh',
emptyMsg: "No data"
}),
//按钮
tbar: [{
text: 'Add Field',
tooltip: 'Add a new field',
iconCls: 'add',
handler: function(){
var tempName = Ext.get("filterName").dom.value;
addItem(idName,tempName);
}
},'-', {
text: 'Update',
tooltip: 'Update field information',
iconCls: 'option',
handler: function(){
updateItem(idName,objectGrid.getBottomToolbar().cursor);//objectGrid.getBottomToolbar().cursor当前记录
}
}
, '-', {
text: 'Delete',
tooltip: 'Delete field information',
iconCls: 'remove',
handler: function(){
delItem(objectGrid.getBottomToolbar().cursor);
}
},'-','Filter:',{
xtype: 'combo',//下拉列表框
fieldLabel:'Filter',
store: dsFieldName,
displayField:'name',
hiddenName:'filterName',
valueField: 'name',
typeAhead: true,
readOnly:false,
loadingText: 'loading',
width: 170,
hideTrigger:false,
minChars:1,
forceSelection:true,
triggerAction: 'all',
listeners:{
'select':function(arg){//当值改变时出发查询方法把结果展示在表格中
searchName = Ext.get("filterName").dom.value;
objectStore.on('beforeload', function(thiz) {
Ext.apply(thiz.baseParams,{start: 0,
filterName:searchName,
limit: pageSize});
});
objectStore.load({
params: {
start: 0,
filterName:searchName,
limit: pageSize
}
});
}
}
},
'-', {
text: 'Home',
tooltip: 'Go back to the home page',
iconCls: 'application-go',
handler: function()
{
var strURL;
strURL="./homepage.do";
window.open(strURL,"_self",'');
}
}
, {
xtype:"tbfill"
},
{
text: 'Logout',
tooltip: 'Logout',
iconCls: 'remove',
handler: function()
{
var strURL;
strURL="./logout.do";
window.open(strURL,'_self','');
}
}
],
frame: true,
title:'CMDB Interface',
region: 'center',
height: 150,
autoWidth: true,
animCollapse: false,
trackMouseOver: true
} );
return objectGrid;
}
// 创建更新窗体
function comCreate(idName,actions,start) {
var attributePanel;
attributePanel = new Ext.Panel({
id: 'attrP',
layout: 'form',
bodyStyle: 'padding:10px',
autoScroll: true,
defaults: {
xtype: 'textfield',
width: 250,
allowBlank: false,
anchor: '95%'
},
items: [{
fieldLabel: 'Parent',
name: idName[0],
id: idName[0] ,
readOnly:true
},{
fieldLabel: 'Enter New Value',
name: idName[1],
id: idName[1]
}]
});
fpanel = new Ext.FormPanel({
region: 'center',
bodyStyle: 'padding:5px',
fileUpload: true,
collapsible: true,//显示展开/收缩按钮
items: [attributePanel],
buttons: [{
text: 'Update Value',
handler: function(){
update(fpanel,start,attributePanel.findById(idName[1]).getValue());
}
}, {
text: 'Reset',
handler: function(){
reset(fpanel,idName);
}
}, {
text: 'Cancel',
handler: function(){
cancel();
}
}]
});
roleUpdateAjax(fpanel,actions,idName);
}
// 创建添加窗体
function comAddCreate(idName,actions,start,parent) {
var attributePanel;
attributePanel = new Ext.Panel({
id: 'attrP',
layout: 'form',
bodyStyle: 'padding:10px',
autoScroll: false,
defaults: {
width: 100,
allowBlank: false,
anchor: '90%'
},
items: [{
xtype: 'textfield',
fieldLabel: 'Parent',
name: idName[0],
id: idName[0],
readOnly:true
},{
xtype: 'textfield',
fieldLabel: 'Enter New Value',
name: idName[1],
id: idName[1]
}]
});
fpanel = new Ext.FormPanel({
region: 'center',
bodyStyle: 'padding:5px',
fileUpload: false,
collapsible: false,//显示展开/收缩按钮
items: [attributePanel],
buttons: [{
text: 'Add Value',
handler: function(){
save(fpanel,start);
}
}, {
text: 'Reset',
handler: function(){
reset(fpanel,idName);
}
}, {
text: 'Cancel',
handler: function(){
cancel();
}
}]
});
fpanel.findById(idName[0]).setValue(parent);
}
// 获取id为Id的FieldColumn信息
function roleUpdateAjax(fpanel,Id,idName) {
Ext.Ajax.request({
url: './getField.do',
method: 'POST',
params: {fieldId:Id},
success: function(result, request){
initUpdateRole(result,fpanel,idName);
},
failure: function(result, request){
Ext.MessageBox.alert('Load faild','Load field information faild!');
window.close();
}
});
}
// 将获取的数据显示在更新窗体中
function initUpdateRole(result,fpanel,idName) {
var fieldColumn = doJSON(result.responseText);
if (fieldColumn.success == true) {
currentValue =fieldColumn.result.value;
fpanel.findById(idName[0]).setValue(fieldColumn.result.name);
fpanel.findById(idName[1]).setValue(fieldColumn.result.value);
}
else {
Ext.MessageBox.alert('Load faild','Load field information faild!');
}
}
// 弹出添加窗体
function addItem(idName,parent) {
addWin = Ext.getCmp('addW');
id = 1;
if (!addWin) {
comAddCreate(idName,'add',0,parent);
addWin = new Ext.Window({
title: 'Add Field',
id: 'addW',
closable: true,
width: 420,
height: 200,
modal: true,
layout: 'fit',
items: [fpanel]
});
}
addWin.show();
}
// 弹出更新窗体
function updateItem(idName,start) {
id = 1;
selectRecord = objectGrid.getSelectionModel().getSelected();
if (!selectRecord) {
Ext.MessageBox.alert('Update', 'Please select a field!');
}
else {
if (cbsm.getCount() == 1) {
updWin = Ext.getCmp('updW');
comCreate(idName,selectRecord.get('id'),start);
if (!updWin) {
updWin = new Ext.Window({
title: 'Update information',
id: 'updW',
closable: true,
width: 420,
height: 200,
plain: true,
modal: true,
layout: 'fit',
items: [fpanel]
});
}
updWin.show();
updWin.doLayout();
}
else {
Ext.MessageBox.alert('Tip', 'Please select a field!');
}
}
}
// 删除操作
function delItem(start) {
selectRecord = objectGrid.getSelectionModel().getSelected();
if (!selectRecord) {
Ext.MessageBox.alert('Delete Operation', 'Please select a field!');
}
else {
var member = objectGrid.getSelectionModel().getSelections();
var value = member[0].get('value');
Ext.MessageBox.show
({title:'<Strong>Delete</Strong>',
msg:'Are you sure want to delete '+value+'?',
width:350,
height:80,
buttons:Ext.MessageBox.YESNO,
fn:function(btn){
if (btn == "yes") {
var m = objectGrid.getSelectionModel().getSelections();
var jsonData = "";
for (var i = 0; i < m.length; i++) {
var ss = m[i].get('id');
if (i === 0) {
jsonData = jsonData + ss;
}
else {
jsonData = jsonData + "," + ss;
}
objectStore.remove(m[i]);
}
delRoleAjax(start, jsonData);
}
}});
}
} // 删除请求(在后台执行删除操作,并返回处理结果)
function delRoleAjax(start,jsonData) {
Ext.Ajax.request({
url: './delField.do',
method: 'POST',
params: {
delData: jsonData
},
success: function(result, request){
var returnJosn = doJSON(result.responseText);
if(returnJosn.success==true)
{
Ext.MessageBox.alert('Success', 'You have deleted a record!');
}
else
{
Ext.MessageBox.alert('Fail', 'You have not deleted a record!');
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize
}
});
}
},
failure: function(result, request){
Ext.MessageBox.alert('Delete Operation', 'Delete Faild!');
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize,
delData: jsonData
}
});
}
});
}
// 更新操作
function update(fpanel,start,newValue)
{
var urlPost;
var paramsPost;
var tijiao = false;
urlPost = './updateField.do';
paramsPost = {
fieldId: selectRecord.get('id')
};
Ext.MessageBox.show
({title:'<Strong>Modify Record</Strong>',
msg:'Are you sure want to modify this record? <br>Current Value:'+currentValue+'<br>New Value:'+newValue,
width:350,
height:100,
buttons:Ext.MessageBox.YESNO,
fn:function(btn){
if (btn == "yes") {
if (fpanel.form.isValid()) {
this.disabled = true;
fpanel.getForm().submit({
url: urlPost,
method: 'post',
params: paramsPost,
waitTitle: 'Waitting information',
waitMsg: 'Data is submitting now please wait',
failure: function(fpanel, action){
var returnJosn = action.result;
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
},
success: function(fpanel, action){
var returnJosn = action.result;
if (returnJosn.success === true) {
Ext.MessageBox.alert('Success', 'you have modified the current record');
if (updWin) {
updWin.close();
updWin = '';
}
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize
}
});
}
else {
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
}
}
});
}
else {
Ext.Msg.alert('Info', 'Please fill in the complete re-submit!');
}
}
}});
}
// 添加操作
function save(fpanel,start) {
var urlPost;
var paramsPost;
if (addWin) {
urlPost = './addField.do';
paramsPost = {
};
}
else
if (updWin) {
urlPost = './updateField.do';
paramsPost = {
fieldId: selectRecord.get('id')
};
}
else {
Ext.Msg.alert('Message', 'Wrong Params!');
window.close();
}
//提交数据
if (fpanel.form.isValid()) {
this.disabled = true;
fpanel.getForm().submit({
url: urlPost,
method: 'post',
params: paramsPost,
waitTitle: 'Waitting information',
waitMsg: 'Data is submitting now please wait',
failure: function(fpanel, action){
var returnJosn = action.result;
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
},
success: function(fpanel, action){
var returnJosn = action.result;
if (returnJosn.success === true) {
Ext.MessageBox.alert('Success', 'you have added a new Record');
if (addWin) {
addWin.close();
addWin = '';
}
if (updWin) {
updWin.close();
updWin = '';
}
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize
}
});
}
else {
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
}
}
});
}
else {
Ext.Msg.alert('Info', 'Please fill in the complete re-submit!');
}
}
// 重置操作
function reset(fpanel,idName) {
fpanel.form.reset();
}
// 退出
function cancel() {
addWin = Ext.getCmp('addW');
updWin = Ext.getCmp('updW');
if (addWin) {
addWin.close();
addWin='';
}
if (updWin) {
updWin.close();
updWin='';
}
}
* Field Column Manager
* @author kensin
*/
var searchName = "" ;
Ext.onReady( function () {
Ext.BLANK_IMAGE_URL = './resource/ext/resources/images/default/s.gif';
Ext.QuickTips.init();
var id = 1;
var contentPanel, fpanel;//添加,更新的面板
var objectGrid;//表格组件
var selectRecord;//选择的记录
var objectStore;//数据仓库组件
var cbsm;//行组件
var actions;//添加,更新的动作
var tabPanel;
var dsFieldName;
var currentValue="";
initView();//载入视图
} );
var pageSize = 50 ;
var addWin,updWin; // 窗体
// 载入视图方法
function initView() {
new Ext.Viewport({
layout:'border',
items:initGrid()//将表格在视图中展现
});
}
// 初始化视图方法
function initGrid() {
//面板中会操作的对象属性
var idName = new Array('fieldName','fieldValue');
//对象的解析器
var roleReader = new Ext.data.JsonReader({
totalProperty: 'totalCount',
root: 'results',
successProperty:'success',
idProperty:'id',
//映射关系
fields: [
{name: 'id', type: 'string',mapping:'id'},
{name: 'name', type: 'string',mapping:'name'},
{name: 'value', type: 'string',mapping:'value'}
]
});
//下拉列表仓库
dsFieldName = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url:'./getFieldNameList.do'
}),
reader: new Ext.data.JsonReader({
root: 'results',
totalProperty: 'totalCount',
successProperty:'success'
}, [
{name: 'name', mapping: 'name'}
])
});
//表格数据仓库
objectStore = new Ext.data.GroupingStore({
reader:roleReader,//以此方式来解析数据
proxy:new Ext.data.HttpProxy //请求并返回数据({url: './getFieldList.do',method:'POST'}),
remoteSort:true,
groupField:'name',//以name进行group by
sortInfo:{},
//当双击行时对更新操作进行监听,并将当前值和修改值显示给用户,以便确认更新
listeners: {
'update': function(thiz, record, operation){
var member = thiz.getAt(thiz.indexOf(record)).data;
if(operation == Ext.data.Record.EDIT){
Ext.MessageBox.show
({title:'<Strong>Modify Record</Strong>',
msg:'Are you sure want to modify this record? <br>Current Value:'+currentValue+'<br>New Value:'+member.value,
width:350,
height:100,
buttons:Ext.MessageBox.YESNO,
fn:function(btn){
if (btn == "yes") {
//确认则更新 Ext.Ajax.request({
url: './updateField.do',//更新请求的URL
method:'post',
params: {
fieldId:member.id,
fieldName:member.name,
fieldValue:member.value},
success:function(response, opts) {
Ext.Msg.alert('Success', 'You have modified the current record');
thiz.commitChanges();
//更新完毕后显示最新的数据 objectStore.load({
params: {
filterName:searchName,
start: objectGrid.getBottomToolbar().cursor,
limit: pageSize
}
});},
failure:function(response, opts) {
Ext.Msg.alert('Faild','Update Faild');}
});
}
}
});
}
}
}
});
// 初始化显示数据
objectStore.load( {
params: {
start: 0,
filterName:searchName,
limit: pageSize
}
} );
var rn = new Ext.grid.RowNumberer();
// 设置双击可进行更新的属性
var editor = new Ext.ux.grid.RowEditor( {
saveText: 'Update',
cancelText:'Cancel',
listeners:{
beforeedit:function(rowedit,index){
var m = objectGrid.getSelectionModel().getSelections();
currentValue = m[0].get('value');
}
}
} );
cbsm = new Ext.grid.CheckboxSelectionModel();
var rn = new Ext.grid.RowNumberer();
// 表格组件
objectGrid = new Ext.grid.GridPanel( {
loadMask: true,
ds: objectStore,
columns: [
rn, //行号列
cbsm, //CheckBox选择列
{id:'id',header: 'fieldId', hidden:true, hideable:false, sortable: true,
dataIndex: 'id'},
{header: 'Field Name', hidden:true,fixed:false,hideable:false, sortable: true,
dataIndex: 'name'},
{header: 'Field Text', fixed:false,hideable:true, sortable: true,editor:{xtype: 'textfield',allowBlank: false },
dataIndex: 'value'}
],
sm: cbsm,
plugins:[editor],//将双击可修插件定义
view: new Ext.grid.GroupingView({
forceFit: true,
showGroupName: false,
enableNoGroups: true,
hideGroupedColumn: false,
groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "rows" : "rows"]})'
}),
//表格最下栏显示信息
bbar: new Ext.PagingToolbar({
pageSize: pageSize,
store: objectStore,
displayInfo: true,
displayMsg: 'View {0}-{1} row / Total {2} rows',
refreshText:'Refresh',
emptyMsg: "No data"
}),
//按钮
tbar: [{
text: 'Add Field',
tooltip: 'Add a new field',
iconCls: 'add',
handler: function(){
var tempName = Ext.get("filterName").dom.value;
addItem(idName,tempName);
}
},'-', {
text: 'Update',
tooltip: 'Update field information',
iconCls: 'option',
handler: function(){
updateItem(idName,objectGrid.getBottomToolbar().cursor);//objectGrid.getBottomToolbar().cursor当前记录
}
}
, '-', {
text: 'Delete',
tooltip: 'Delete field information',
iconCls: 'remove',
handler: function(){
delItem(objectGrid.getBottomToolbar().cursor);
}
},'-','Filter:',{
xtype: 'combo',//下拉列表框
fieldLabel:'Filter',
store: dsFieldName,
displayField:'name',
hiddenName:'filterName',
valueField: 'name',
typeAhead: true,
readOnly:false,
loadingText: 'loading',
width: 170,
hideTrigger:false,
minChars:1,
forceSelection:true,
triggerAction: 'all',
listeners:{
'select':function(arg){//当值改变时出发查询方法把结果展示在表格中
searchName = Ext.get("filterName").dom.value;
objectStore.on('beforeload', function(thiz) {
Ext.apply(thiz.baseParams,{start: 0,
filterName:searchName,
limit: pageSize});
});
objectStore.load({
params: {
start: 0,
filterName:searchName,
limit: pageSize
}
});
}
}
},
'-', {
text: 'Home',
tooltip: 'Go back to the home page',
iconCls: 'application-go',
handler: function()
{
var strURL;
strURL="./homepage.do";
window.open(strURL,"_self",'');
}
}
, {
xtype:"tbfill"
},
{
text: 'Logout',
tooltip: 'Logout',
iconCls: 'remove',
handler: function()
{
var strURL;
strURL="./logout.do";
window.open(strURL,'_self','');
}
}
],
frame: true,
title:'CMDB Interface',
region: 'center',
height: 150,
autoWidth: true,
animCollapse: false,
trackMouseOver: true
} );
return objectGrid;
}
// 创建更新窗体
function comCreate(idName,actions,start) {
var attributePanel;
attributePanel = new Ext.Panel({
id: 'attrP',
layout: 'form',
bodyStyle: 'padding:10px',
autoScroll: true,
defaults: {
xtype: 'textfield',
width: 250,
allowBlank: false,
anchor: '95%'
},
items: [{
fieldLabel: 'Parent',
name: idName[0],
id: idName[0] ,
readOnly:true
},{
fieldLabel: 'Enter New Value',
name: idName[1],
id: idName[1]
}]
});
fpanel = new Ext.FormPanel({
region: 'center',
bodyStyle: 'padding:5px',
fileUpload: true,
collapsible: true,//显示展开/收缩按钮
items: [attributePanel],
buttons: [{
text: 'Update Value',
handler: function(){
update(fpanel,start,attributePanel.findById(idName[1]).getValue());
}
}, {
text: 'Reset',
handler: function(){
reset(fpanel,idName);
}
}, {
text: 'Cancel',
handler: function(){
cancel();
}
}]
});
roleUpdateAjax(fpanel,actions,idName);
}
// 创建添加窗体
function comAddCreate(idName,actions,start,parent) {
var attributePanel;
attributePanel = new Ext.Panel({
id: 'attrP',
layout: 'form',
bodyStyle: 'padding:10px',
autoScroll: false,
defaults: {
width: 100,
allowBlank: false,
anchor: '90%'
},
items: [{
xtype: 'textfield',
fieldLabel: 'Parent',
name: idName[0],
id: idName[0],
readOnly:true
},{
xtype: 'textfield',
fieldLabel: 'Enter New Value',
name: idName[1],
id: idName[1]
}]
});
fpanel = new Ext.FormPanel({
region: 'center',
bodyStyle: 'padding:5px',
fileUpload: false,
collapsible: false,//显示展开/收缩按钮
items: [attributePanel],
buttons: [{
text: 'Add Value',
handler: function(){
save(fpanel,start);
}
}, {
text: 'Reset',
handler: function(){
reset(fpanel,idName);
}
}, {
text: 'Cancel',
handler: function(){
cancel();
}
}]
});
fpanel.findById(idName[0]).setValue(parent);
}
// 获取id为Id的FieldColumn信息
function roleUpdateAjax(fpanel,Id,idName) {
Ext.Ajax.request({
url: './getField.do',
method: 'POST',
params: {fieldId:Id},
success: function(result, request){
initUpdateRole(result,fpanel,idName);
},
failure: function(result, request){
Ext.MessageBox.alert('Load faild','Load field information faild!');
window.close();
}
});
}
// 将获取的数据显示在更新窗体中
function initUpdateRole(result,fpanel,idName) {
var fieldColumn = doJSON(result.responseText);
if (fieldColumn.success == true) {
currentValue =fieldColumn.result.value;
fpanel.findById(idName[0]).setValue(fieldColumn.result.name);
fpanel.findById(idName[1]).setValue(fieldColumn.result.value);
}
else {
Ext.MessageBox.alert('Load faild','Load field information faild!');
}
}
// 弹出添加窗体
function addItem(idName,parent) {
addWin = Ext.getCmp('addW');
id = 1;
if (!addWin) {
comAddCreate(idName,'add',0,parent);
addWin = new Ext.Window({
title: 'Add Field',
id: 'addW',
closable: true,
width: 420,
height: 200,
modal: true,
layout: 'fit',
items: [fpanel]
});
}
addWin.show();
}
// 弹出更新窗体
function updateItem(idName,start) {
id = 1;
selectRecord = objectGrid.getSelectionModel().getSelected();
if (!selectRecord) {
Ext.MessageBox.alert('Update', 'Please select a field!');
}
else {
if (cbsm.getCount() == 1) {
updWin = Ext.getCmp('updW');
comCreate(idName,selectRecord.get('id'),start);
if (!updWin) {
updWin = new Ext.Window({
title: 'Update information',
id: 'updW',
closable: true,
width: 420,
height: 200,
plain: true,
modal: true,
layout: 'fit',
items: [fpanel]
});
}
updWin.show();
updWin.doLayout();
}
else {
Ext.MessageBox.alert('Tip', 'Please select a field!');
}
}
}
// 删除操作
function delItem(start) {
selectRecord = objectGrid.getSelectionModel().getSelected();
if (!selectRecord) {
Ext.MessageBox.alert('Delete Operation', 'Please select a field!');
}
else {
var member = objectGrid.getSelectionModel().getSelections();
var value = member[0].get('value');
Ext.MessageBox.show
({title:'<Strong>Delete</Strong>',
msg:'Are you sure want to delete '+value+'?',
width:350,
height:80,
buttons:Ext.MessageBox.YESNO,
fn:function(btn){
if (btn == "yes") {
var m = objectGrid.getSelectionModel().getSelections();
var jsonData = "";
for (var i = 0; i < m.length; i++) {
var ss = m[i].get('id');
if (i === 0) {
jsonData = jsonData + ss;
}
else {
jsonData = jsonData + "," + ss;
}
objectStore.remove(m[i]);
}
delRoleAjax(start, jsonData);
}
}});
}
} // 删除请求(在后台执行删除操作,并返回处理结果)
function delRoleAjax(start,jsonData) {
Ext.Ajax.request({
url: './delField.do',
method: 'POST',
params: {
delData: jsonData
},
success: function(result, request){
var returnJosn = doJSON(result.responseText);
if(returnJosn.success==true)
{
Ext.MessageBox.alert('Success', 'You have deleted a record!');
}
else
{
Ext.MessageBox.alert('Fail', 'You have not deleted a record!');
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize
}
});
}
},
failure: function(result, request){
Ext.MessageBox.alert('Delete Operation', 'Delete Faild!');
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize,
delData: jsonData
}
});
}
});
}
// 更新操作
function update(fpanel,start,newValue)
{
var urlPost;
var paramsPost;
var tijiao = false;
urlPost = './updateField.do';
paramsPost = {
fieldId: selectRecord.get('id')
};
Ext.MessageBox.show
({title:'<Strong>Modify Record</Strong>',
msg:'Are you sure want to modify this record? <br>Current Value:'+currentValue+'<br>New Value:'+newValue,
width:350,
height:100,
buttons:Ext.MessageBox.YESNO,
fn:function(btn){
if (btn == "yes") {
if (fpanel.form.isValid()) {
this.disabled = true;
fpanel.getForm().submit({
url: urlPost,
method: 'post',
params: paramsPost,
waitTitle: 'Waitting information',
waitMsg: 'Data is submitting now please wait',
failure: function(fpanel, action){
var returnJosn = action.result;
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
},
success: function(fpanel, action){
var returnJosn = action.result;
if (returnJosn.success === true) {
Ext.MessageBox.alert('Success', 'you have modified the current record');
if (updWin) {
updWin.close();
updWin = '';
}
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize
}
});
}
else {
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
}
}
});
}
else {
Ext.Msg.alert('Info', 'Please fill in the complete re-submit!');
}
}
}});
}
// 添加操作
function save(fpanel,start) {
var urlPost;
var paramsPost;
if (addWin) {
urlPost = './addField.do';
paramsPost = {
};
}
else
if (updWin) {
urlPost = './updateField.do';
paramsPost = {
fieldId: selectRecord.get('id')
};
}
else {
Ext.Msg.alert('Message', 'Wrong Params!');
window.close();
}
//提交数据
if (fpanel.form.isValid()) {
this.disabled = true;
fpanel.getForm().submit({
url: urlPost,
method: 'post',
params: paramsPost,
waitTitle: 'Waitting information',
waitMsg: 'Data is submitting now please wait',
failure: function(fpanel, action){
var returnJosn = action.result;
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
},
success: function(fpanel, action){
var returnJosn = action.result;
if (returnJosn.success === true) {
Ext.MessageBox.alert('Success', 'you have added a new Record');
if (addWin) {
addWin.close();
addWin = '';
}
if (updWin) {
updWin.close();
updWin = '';
}
objectStore.load({
params: {
filterName:searchName,
start: start,
limit: pageSize
}
});
}
else {
Ext.MessageBox.alert('save faild',returnJosn.msg);
this.disabled = false;
}
}
});
}
else {
Ext.Msg.alert('Info', 'Please fill in the complete re-submit!');
}
}
// 重置操作
function reset(fpanel,idName) {
fpanel.form.reset();
}
// 退出
function cancel() {
addWin = Ext.getCmp('addW');
updWin = Ext.getCmp('updW');
if (addWin) {
addWin.close();
addWin='';
}
if (updWin) {
updWin.close();
updWin='';
}
}