1、ie8浏览器中,combobox的大小要使用px,才能与一般浏览器大小一致
2、从数据库中读出的时间戳timestamp类型的数据,转换为页面的string类型,会默认在末尾加.0,可以通过在js前端控制:
formatter : function(value, row, index) {
var str=value.substr(0,19);
return str;
}
3、修改页面如果有combobox字段,可以先将查询出来的值放到隐藏域中,再在js中加载,把值赋给combobox:
<input id="lighttype" name="lighttype" value="${adaptModel.light_type}" type="hidden"/>
$(document).ready(function(){
initSelect();
});
function initSelect(){
var lighttype=$("#lighttype").val();
$("#light_type").combobox("setValue",lighttype);
}
4、验证通过form才能提交:
var isValid = $(form).form('validate');
if(isValid){
$.ajax({
});
}
2016-06-20
1、el表达式可以直接用在js中,如:
$(document).ready(function(){
var device_type="${deviceinfo.device_type}";
}
也可以用在路径url中,如:
Url:basepath+”xxxaction/getxxx.do?num=${good.good_num}”
2、JSON.parse():从字符串中解析出json对象
JSON.stringify():从对象中解析出json类型的字符串
3、sql中使用resultClass,必须确保model的属性名称与数据库中的字段名称一模一样,(不区分大小写),而resultMap的话,只要property和column对应好就可以了。resultMap的性能更好
2016-06-24
1、浏览器在解析js时,会把‘’和0当成同一个值,写js时要注意
2、<a href=”#”>与<a href=”javascript:void(0)”>的区别:
<a href=”#”>中的# 是锚点的意思,默认为#top。当页面较长时,使用这种方式会让页面刷新到首页(页面的最上部)
<a href=”javascript:void(0)”>是一个死链接,当使用超链接处理js脚本(一般是click),又不想回到首页(局部刷新)时使用
故,当需要整体刷新时,使用#;当需要局部刷新时,使用如下几种方式:
<a href=”####”></a>
<a href=”javascript:void(0)”></a>
<a href=”javascript:void(null)”></a>
<a href=”#” onclick=”return false”></a>
2016-06-29
1、var arr=[];
Arr.join(‘,’);
//以逗号为分隔符,将数组的元素组成一个字符串
2、combobox的data-options=”panelHeight:auto”可以控制下拉框显示选项的高度,超过即会出现滚动条
3、formatter: function(value,row,index){
if (typeof(value) != "undefined") {
value = value.replace(/</g, "<");
value = value.replace(/>/g, ">");
return value.length>10?value.substr(0,10)+"...":value;
}
}
//为防止恶性注入js代码,用replace方法替换输入的大于号小于号,replace的第一个参数是一个正则表达式.
2016-06-30
1、success:function(result){
var Obj=eval('(' + result + ')');
}
//js中的eval(codestring)函数,先解释js代码,然后再执行它,codestring是包含有js语句的字符串
2016-07-01
1、图片上传下载
主页面:
<td rowspan="4" colspan="2" align="center">
<div ><img style="150px;height:150px"id="imgFile" src="${ct}/employee/getImg.do?imgPath="/></div>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-add'" plain="true" onclick="return uploadImg();">上传头像</a>
<input id="ygtx" name="ygtx" type="hidden"/>
</td>
上传头像的方法:
function uploadImg(){
var dialog = parent.ns.modalDialog({
title: '上传头像',
url: '${ct}/employee/toUploadImg.do',
400,
height: 300,
buttons: [ {
text: '保存',
iconCls: 'icon-save',
handler: function () {
var imgPath=dialog.find('iframe').get(0).contentWindow.getImgPath();
if(imgPath==""){
parent.$.messager.alert('提示', '请选择正确的图片格式文件','warning');
return false;
}
//获取头像图片
url="${ct}/employee/getImg.do?imgPath="+imgPath;
$("#imgFile").attr("src",url);
$("#ygtx").val(imgPath);
dialog.dialog('destroy');
}
},{
text: '关闭',
iconCls:'icon-cancel',
handler: function () {
dialog.dialog('destroy');
}
}]
});
}
子页面:
<form enctype="multipart/form-data" id="uploadImgForm" action="${ct}/employee/uploadImg.do" method="post" >
<table style="margin-left: auto;margin-right: auto;margin-top: 50px" class="gridtable">
<tr><td> <input type="file" id="imgFile" required="required"
name="imgFile" />
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-upload'" onclick="validateImg()" plain="true" >提交</a>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
function validateImg(){
var imgFormats=['bmp','jpg','jqeg','jpe','jfif','gif','png'];
var imgRealPath =$("#imgFile").val();
var imgSplit = imgRealPath.split('.');
var imgFormat = imgSplit[imgSplit.length-1];
//验证图片格式
var formateIsRight = false;
for(var i=0;i<imgFormats.length;i++){
if(imgFormats[i]==imgFormat){
formateIsRight=true;
break;
}
}
if(!formateIsRight){
jQuery.messager.alert('提示','请上传常用的图片格式文件','warning');
return false;
}else{
$("#uploadImgForm").submit();
}
}
function getImgPath(){
var imgPath=$("#imgPath").val();
if(imgPath!=undefined){
return $("#imgPath").val();
}else{
return "";
}
}
</script>
Action类方法:
//上传头像
public String uploadImg(){
HttpServletRequest request=getHttpServletRequest();
ContinueFTP continueFTP=new ContinueFTP();//支持断点续传的FDP类
try {
String ftpPropertiesPath=request.getSession().getServletContext().getRealPath(File.separator+"WEB-INF"+File.separator+"classes"+File.separator+"conf"+File.separator+"properties"+File.separator+"ftp.properties");
com.kuangchi.sdd.util.file.FTP ftp=com.kuangchi.sdd.util.file.FTPUtil.getFtp(ftpPropertiesPath);
String dateString= DateUtil.getDateString(new Date(),"yyyyMMdd");
String dateTimeString=DateUtil.getDateString(new Date(),"yyyyMMddHHmmss");
String fileName=dateTimeString+imgFileFileName;
String imgPath=dateString+"/"+fileName;
continueFTP.connect(ftp.getHost(), ftp.getPort(), ftp.getUserName(), ftp.getPassword());
continueFTP.upload(imgFile,imgPath );
request.setAttribute("message", "上传成功");
request.setAttribute("imgPath",imgPath );
} catch (IOException e1) {
e1.printStackTrace();
request.setAttribute("message", "上传失败");
}
return "success";
}
//获取头像
public void getImg(){
HttpServletRequest request=getHttpServletRequest();
HttpServletResponse response=getHttpServletResponse();
String imgPath=request.getParameter("imgPath");
ContinueFTP continueFTP=new ContinueFTP();
java.io.InputStream is=null;
OutputStream out=null;
try {
String ftpPropertiesPath=request.getSession().getServletContext().getRealPath(File.separator+"WEB-INF"+File.separator+"classes"+File.separator+"conf"+File.separator+"properties"+File.separator+"ftp.properties");
com.kuangchi.sdd.util.file.FTP ftp=com.kuangchi.sdd.util.file.FTPUtil.getFtp(ftpPropertiesPath);
continueFTP.connect(ftp.getHost(), ftp.getPort(), ftp.getUserName(), ftp.getPassword());
if (null!=imgPath&&!imgPath.trim().equals("")&&!"undefined".equals(imgPath)) {
is=continueFTP.download(imgPath);
}else{
//如果没有上传头像,则给一个默认头像
String defaultImg=request.getSession().getServletContext().getRealPath(File.separator+"businessConsole"+File.separator+"images"+File.separator+"defaultImg.jpg");
File file=new File(defaultImg) ;
is=new FileInputStream(file);
}
out=response.getOutputStream();
byte[] buffer=new byte[1024];
while (is.read(buffer)!=-1) {
out.write(buffer);
}
out.flush();
continueFTP.disconnect();
} catch (Exception e) {
e.printStackTrace();
}finally{
if (null!=is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null!=out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2016-08-16
1、Map对象的keySet()方法获取所有的key值,放在一个Set中:
Map map=new HashMap();
Map.put(1,”a”);
Map.put(2,”b”);
Map.put(3,”c”);
Set keys1=map.keySet();
Set keys2=map.keySet();
Set keys3=map.keySet();
上面3个set对象,引用的是同一个对象,map的keySet()方法只返回一个set实例,所以当从keys1中删除一个对象时,key2,key3也会受到影响:
Keys1.remove(1);
System.out.println(keys1);
System.out.println(keys2);
System.out.println(keys3);
结果为:[2,3]
[2,3]
[2,3].
循环map的key:for(String datakey:map.keySet()){
System.out.println(datakey);
};
同时可用泛型:for(Map.Entry<Integer,String> entry:map.entrySet){
System.out.println(entry.getKey()+””+entry.getValue());
}//Map.Entry是Map声明的一个内部接口
补充:遍历Map的常用方法-->使用迭代器遍历Map
(1)Map map=new HashMap();
Iterator iterator=map.entrySet().iterator();
While(iterator.hasNext()){
Map.Entry entry=iterator.next();
Object key=entry.getKey();
}
(2)Map map=new HashMap();
Set keySet=map.keySet();
Iterator iterator=keySet.iterator();
While(iterator.hasNext()){
Object key=iterator.next();
Object value=map.get(key);
}
(3)Map map=new HashMap();
Collection c=map.values();
Iterator iterator=c.iterator();
While(iterator.hasNext()){
Object value=iterator.next();
}//单纯遍历value值,Map的values()方法,返回的是value的collection集合
2016-09-01
1、java中,两个double类型的数据不能直接用==或!=来比较大小,由于会丢失精度,比较出来的结果是错误的。两个Double类型数据的比较,可以用减法-来实现与0的大小比较
2、分页显示的页数与显示总条数不符合时,考虑是否sql语句忘记加分页条件
3、查询时Sql语句注意标志位的使用,要排除已删除的记录;模糊查询语句尽量用join等连接操作,避免空字符的错误
2016-09-02
1、读取 properties配置文件的工具方法propertyToMap的主要实现代码:
Properties prop=new Properties();
Map<String,String> pros=new HashMap<String,String>();
InputStream in=PropertiesToMap.class.getClassLoader().getResourceAsStream(“/conf/properties/”)+propertyName;
Try{
Prop.load(in);
Iterator<String> it=prop.stringPropertyNames().iterator();
While(it.hasNext()){
String key=it.next();
String value=prop.getProperty(key);
Pros.put(key,value);
}
In.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
If(in!=null){
Try{in.close();}catch(IOException e){
e.printStackTrace();
}
}
}
Return pros;
2、mysql语句中使用条件判断:
select
case
when type=0 then '充值'
when type=1 then '消费'
when type=2 then '补助'
END as type,
id,
detail_flow_no as detailFlowNo
from
kc_xf_account_detail
where 1=1
3、join和left join的区别
(1)join留下来的记录是完全符合on条件的
(2)A Left join B:A的记录全保留,B的记录符合on条件的留下
4、mysql的left(str,length)函数,截取部分字符串
2016-09-08
1、后台使用split函数对字符串进行分割时,注意,如果分隔符是‘.’‘|’时,要使用‘\.’‘\|’,因为‘.’‘|’本身是转义字符
2016-09-13
1、将datagrid1选中的记录行添加到另一个datagrid2:
Var select=datagrid1.datagrid(“getSelected”);
Datagrid2.datagrid(“appendRow”,select);
2、获取datagrid所有行记录:
Var data=datagrid.datagrid(“getData”);
Var nums=[];
For(data.rows.length){
Nums.push(Data.row[i].d_num);
}
3、按行索引删除行记录:
Var rowIndex=datagrid.datagrid(“getRowIndex”,datagrid.datagrid(“getSelected”));
Datagrid.datagrid(“deleteRow”,rowIndex);
2016-09-19
1、mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
修改mysql5.7的配置文件即可解决,方法如下:
linux版:找到mysql的安装路径进入默认的为/usr/share/mysql/中,进行对my-default.cnf编辑
利用查找功能"/"找到"sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES"
将其删除或者是注释即可。
windows版:32位找到mysql安装路径直接修改my.ini文件利用ctrl+f
搜索出来的内容应该是sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
将其注释或者是删除即可。
64位需要进入windows的隐藏文件夹C:ProgramData中找到MySQLMySQL Server 5.7,修改配置文件my.ini
利用ctrl+f搜索出来的内容应该是sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
将其注释或者是删除即可。
2016-09-20
1、
(1)下载批量导入模板
表格模板ExcelExportTemplate中的createLongTitleRow方法可以设置模板的表头、说明等,
TitleRowCell的构造方法有两个参数,一个是列标题,一个是是否必填的,在此可以控制字段的必填
(2)上传填写了内容的模板文件
2、dStr.compareTo(targetdate) > 0比较日期大小
Dstr是当前日期,targetdate是目标日期,大于0说明当前大于目标
3、date.match(“正则表达式”),匹配格式
4、HSSFSheet sheet的方法getLastRowNum获取的是最后一行的行索引
2016-11-08
1.$('#dataGrid').datagrid({
rowStyler:function(rowIndex,getData){
if (getData.is_default==1){
return '';
}
}
});//设置行样式
2.new Date().setHours(hours,minutes,seconds)给新建的日期对象设置小时、分钟、秒,参数是可选的。设置完成后,可以用来比较日期大小;
2016-11-16
1、java.net.InetAddress的静态方法getLocalHost()获取本地ip地址。
2、Mysql中不等于用!=和<>都可以,sqlserver中不等于用<>,不兼容!=,php中不等于用!=和<>都可以。
3、按索引修改datagrid的行记录的字段后,用方法acceptChanges提交所有修改后的数据,如:
dataGrid.datagrid('getData').rows[index].doorPowerNum=doorsObj.doorPowerNumStr;
dataGrid.datagrid('acceptChanges');
4、idField为num,columns:{field:’num’...},方法selectRecord可以通过id域值参数选择一行,如:
var arr=doorPowerNumStr.split("|");
for(var i=0;i<arr.length;i++){
dataGrid.datagrid("selectRecord",arr[i]);
}
2016-11-23
1、调试时,点击下一步,出现source not found时,可以点击下面的编辑按钮edit source lookup path,弹窗内选择add,再选择java project里你的项目,ok确定即可:
Debug 视图下
-》在调试的线程上 右键单击
-》选择Edit Source Lookup Path
-》选择Add
-》选择Java Project
选择相应的Project 进行OK确定即可
2016-12-16
1、端口8005, 8080, 8009被占用了。可能是在打开Tomcat的情况下关闭了Eclipse,或是Eclipse非正常关闭,导致先前的Tomcat没有被关闭,端口占用。或是其他软件占用了tomcat的端口号。
解决方法:
:杀掉占用端口的软件。
打开任务管理器,找到Java虚拟机相关的进程javaw.exe,将它结束掉
2017-01-05