1. 当对应表没有自增主键但是值又必须唯一时,
解决:
//添加 角色序号不能重复 的逻辑
var m = grid.store.getModifiedRecords(); //获得grid中修改后的值(包括 编辑的 和 新增的)
var codeRepeat = "";
store.each(function(record) {
if(record.get('roleCode') == m[i].get('roleCode')){
codeRepeat += "repeat"; //新增的行内容会自动加入store中,each的时候总是能找到一个自己,若出现两次表示有重复
};
});
if(codeRepeat == "repeatrepeat"){
Ext.Msg.alert('信息提示', '角色序号不能重复!'); //本来想在each里面进行Ext.Msg.alert的,但是貌似不行所以只能到外面来了
m[i].set('roleCode',""); //清除对应的重复字段的值
return false;
}
2. 对于Grid中某些字段编辑时不可修改,但新建时需要可以修改的问题
解决:利用flag字段对“新增”和“修改”的区别判断
在dao中传到前台的json中增加字段flag并设置默认值,页面新建时flag默认为空即可
grid.on('beforeedit',function(e){ //在grid可编辑之前进行对应的判断
if((e.column==1)&&(e.record.get('flag')=='1')){ //e.column为对应的列,1为第一列
e.cancel=true;
}
});
3. 注意点:java程序中查询的是数据库中 未commit的数据 ,pl/sql中查询的是commit之后的数据
还不知道为什么
4. FormPanel 数据提交时的技巧:如果允许的话,采用 先全部删除 再添加对应右侧所选全部数据
5. js文件进行复制时:不要alt+a+copy 直接copy整个文件再更名 否则无法加载效果可能是格式编码问题
6. 重复加载store时的传值问题,
解决:在store加载之前传值
fromStore.on('beforeload', function(e,options){
fromStore.baseParams={departId:departId,roleId:roleId,selectFlag:""};
});
7. items : [ {},{},….. ] 中 new 的时候 不用加{ }
8. 要注意 applicationContext.xml 和 struts-config.xml的联系 页面到后台的访问顺序
9.Handler 获取绝对路径 :
String path = request.getSession().getServletContext().getRealPath(rootDir);
10. 上传文件时,由于IE8的安全性设置(IE8以下均没有),会出现虚拟路径,获取其上传的绝对路径:
{
xtype : 'textfield',
fieldLabel : '上传文件',
name : 'userfile',
id : 'userfile',
inputType : 'file',
width : 300,
height : 20,
blankText : 'File can\'t not empty.'
}
var file_upl = document.getElementById('userfile');
file_upl.select();
var realpath = document.selection.createRange().text; //获取到上传文件的绝对路径
11. 关于说也说不完的 String.split(" ");
String s[] = filePath.split("\\\\");
String s[] = filePath.split("and|or");
2、如果用“|”作为分隔的话,必须:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用 String.split("and|or");
12. oracle 更改用户名:
select user#, name from user$ where name = 'ARWEN';
update user$ set name = 'WEIWENHP' where user# = 250;
--接着重启数据库 或者这样强制更新下.
alter system checkpoint;
alter system flush shared_pool;
13. 今天学的一句插入语句:
insert into T_INDEX_ROLE_TO_ASSE (role_code,report_code,Asse_Id,AUTHORITY)
select 'admin_self',report_code,Asse_Id,'1' from T_INDEX_ASSE_TO_REPORT
14. HTML中文本太长的隐藏处理
<style type="text/css">
div{ width:100px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
</style>
</head>
<body>
<div>太长的文字如何做溢出隐藏处理太长的文字如何做溢出隐藏处理太长的文字如何做溢出隐藏处理太长的文字如何做溢出隐藏处理</div>
15. oracle中创建用户并赋权限
create user sysadmin identified by adminsys;
--alert user sysadmin default tablespace ts_user_data;
grant create session,create table,unlimited tablespace to sysadmin
grant dba to sysadmin
16.创建和删除表空间
create tablespace TS_USER_DATA
logging datafile 'D:\oracle_11g\oradata\idpora\TS_USER_DATA.dbf'
size 512m
autoextend on
next 64m maxsize 10240m
DROP TABLESPACE TS_USER_DATA INCLUDING CONTENTS AND DATAFILES;
17.doadd时候要先置''
18.新建才能修改的问题
//e.column 为第几列 flag判断是否为新增
grid.on( 'beforeedit',function (e){
if (e.column == 0 && e.record.get('flag')== '') {
e.cancel = true;
}
} );
20.获取所有store中的数据:
var mrids = '' ;
store.each( function(record) {
mrids += record.get('mrid')+',';
});
mrids = mrids.substring(0,mrids.length -1);
21.两个combobox的级联:
countycb.on('expand',function(newValue,oldValue){
if(citycb.getValue() == ' ' || citycb.getValue() == '' ){
countystore.filter('parentid','nothing');
Ext.Msg.alert('提示','请先选择查询“地市”!');
countycb.reset();
return false;
}else{
countystore.filter('parentid',citycb.getValue());
}
});
countycb.on('collapse',function(newValue,oldValue){
countystore.filter('','');
});
citycb.on('change',function(newValue,oldValue){
countycb.reset();
});
22.
stationStore.each(function(record){gridstationStore.add(record);});
24.查询对应表的所有字段
select * from sys.user_tab_columns where table_name='JX_LDPT_CPLANT'
if(Ext.isEmpty(datecb.getValue())){
Ext.Msg.alert('信息提示','请选择查询日期!');
return false;
26. 前后台乱码解决方法:
//--1.
encodeURI(encodeURI(limitdataDesc.getValue()));
//--1.
URLDecoder.decode(request.getParameter("desc"),"utf-8");
//--2.
encodeURIComponent(limitdataDesc.getValue());
//--2.
this.getRequestIsNull(request, "desc","utf-8");
27. 分页传值解决:
store.on('beforeload',function(){
var str = '&county='+countycb.getValue();
store.proxy.url = '../control/substationSituation?act=showSubstation'+str;
});
//或者使用:
stationGridStore.baseParams={stationDesc:gridStationText.getValue()};
28.js时间问题:
varstartdt =newDate();
varenddt =newDate(startdt.getTime()-15000);
startdt.format("Y-m-d H:i:s");
Date.patterns = {
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
ShortDate: "n/j/Y",
LongDate: "l, F d, Y",
FullDateTime: "l, F d, Y g:i:s A",
MonthDay: "F d",
ShortTime: "g:i A",
LongTime: "g:i:s A",
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
YearMonth: "F, Y"
};
dt.format(Date.patterns.ShortDate));
29. chrome 中 jsonData 的传递:
jsonData = jsonData + encodeURIComponent(Ext.util.JSON.encode(m[i].data)) + ',' ;
// ie中不需要encodeURIComponent
30.grid铺满窗口:
// grid 中的一个属性
viewConfig:{forceFit: true},
31.grid右键菜单显示:
var rowIndex;
//rowcontextmenu 行右键 cellcontextmenu 单元格右键
grid.on( "cellcontextmenu" , function (grid,row_Index,cellIndex,e)
{
e.preventDefault();//去除浏览器本身的右键效果
if (row_Index < 0) { return false ; }
rowIndex = row_Index;
if(cellIndex == 6) {
var treeMenu = new Ext.menu.Menu ([
{
xtype: "",
text: "查看详细" ,
iconCls: 'context-dog' ,
pressed: false ,
handler: show //function () {}
}
]);
treeMenu.showAt(e.getXY());//显示菜单
}
} );
//handler 属性若为 show() 则不等右键菜单被点击而直接执行
32. grid中sm 选中的记录:
var tranunitrecord = tranunitGrid.getSelectionModel().getSelected();
- [<uri> ,]*: 根据用户定义的资源显示
- auto: 正常鼠标箭头
- default: 默认鼠标
- all-scroll: 三角方向标
- crosshair: 十字标
- hand:手型鼠标
- pointer: 点状鼠标
- move: 移动鼠标
- e-resize,ne-resize,nw-resize,n-resize,se-resize,sw-resize,s-resize,w-resize: 改变大小鼠标
- text: 文字鼠标/ I 形光标
- not-allowed: 无效光标
- wait: 等待鼠标
- help: 求助鼠标/ ?
- progress: 过程鼠标
- inherit: 继承
- vertical-text: 水平I 形光标
- no-drop: 不可拖动光标
//添加列单击事件,方便在列内添加功能按钮
Ext.grid.GridPanel.prototype.processEvent = function(name, e) {
this .fireEvent(name, e);
var t = e.getTarget();
var v = this .view;
var header = v.findHeaderIndex(t);
if(header !== false ){
this .fireEvent( "header" + name, this , header, e);
}else{
var row = v.findRowIndex(t);
var cell = v.findCellIndex(t);
if(row !== false ){
this .fireEvent( "row" + name, this , row, e);
if(cell !== false ){
var col = this.colModel.config[cell];
var record= this .store.getAt(row);
if( typeof col.onColumnCilck == "function" ){
col.onColumnCilck( this,record,row,cell,e);
}
this .fireEvent( "cell" + name, this , row, cell, e);
}
}
}
}
//按钮列
Ext.grid.ButtonColumn = function(text) {
var a={
text:text
}
return function (v, p, record) {
var tpl= new Ext.Template( '<button type="button"><font style="cursor:hand;font: 8pt verdana;color:green;height=10;width:10"><U>{text}</U></font></button>' );
return tpl.apply(a);
}
}
//cm中的实现
{
header: "操作",
width: 100,
dataIndex: 'compare' ,
align : 'center' ,
renderer : Ext.grid.ButtonColumn( '进行比较' ),
onColumnCilck: function(grid,record,rowIndex,colIndex,e){}