经过两个半月的实习,接触了很多Java Web开发的知识,不能说完全理解Java Web开发的技术,但在开发过程中遇到的一些问题,使自己的技术有很大的提高。当遇到问题时,通过在网上搜集解决的方法,和通过询问同事,最终发现一些问题的解决方法比想象中的简单,几乎所有的问题只要你找到了解决问题的方法后,对方法的理解和应用都是很简单的,比如一些问题的解决方法就是两行代码,有的甚至只要添加一个属性值就可以。在这里和大家分享我在开发这个系统的过程中遇到的四个问题:
- 实现发邮件功能
- 前台String型数据到后台Date型数据的转化
- 页面上实时显示时间
- 将数据导出到Excel中
当然遇到的问题远远不止这四个。
1 实现发邮件功能
一个办公系统中经常会有给职员群发邮件的情况,具体该怎么实现,首先让我们看一个实例(ExtJS中的应用):
location.href ='mailto:HR-Manager@163.com?cc=leader@163.com&subject=培训通知&body=请各位准时参加本次培训!';
下面就让我们解释一下上面的代码。其中mailto:后面接着的HR-Manager@163.com是指收件人的地址,?和&在这里可以理解为分割的意思,cc=后面接的leader@163.com是抄送人的地址,地址可以是多项的,地址之间用;隔开,subject=后面接的是邮件主题,body=后接的是邮件正文了。
由于有时我们抄送的地址是不确定的,而且是多个地址,这就需要我们做一些额外的工作来确定每次需要抄送的地址。比如有一个人力资源管理系统,系统管理员需要在每个培训计划开始之前给参与人员发送提醒准时参加的邮件,这时我们可以设置一个按钮,并通过系统管理员选择的行(就是参与者的信息)来确定需要抄送的地址,代码如下:
{
text: '通知',
handler: function(){
var selections = tab_grid_participant.getSelectionModel().getSelections();
var mail = "";
var i = 0;
for (i = 0; i <selections.length; i++) {
mail+= selections[i].get('participantEmployeeEmail') + ";";
}
location.href= 'mailto:HR-Manager@163.com?cc='
+ mail
+ '&subject=培训通知&body=请各位准时参加本次培训!';
}
}
其中tab_grid_participant是一个GridPanel,participantEmployeeEmail是tab_grid_participant中的一个数据项,通过for循环就能实现将所选的抄送地址都赋值到mail中,最后将mail加在cc=后面即可。
2 前台String型数据到后台Date型数据的转化
前后台数据交换时会遇到数据类型的不一致,从而导致数据不能按预想的格式显示出来,下面就提供一个方法,来解决前台是String型,后台是Date型的数据不一致性问题。
其实,这个方法用简单,就两行代码,比如,preBirthday是前台传来的String型数据,我们需要将它存到后台的Date型数据中,这时我们只需在service层的相关函数中增加如下两行代码:
long midBirthday = Long.parseLong(preBirthday);
java.sql.Date backBirthday = new java.sql.Date(midBirthday);
这时的backBirthday就是一个Date型数据了。
3 页面上实时显示时间
我们经常在一些网页和系统中看到可以实时显示日期、星期和时间的情况,这个看起来是很难,因为它是在不停的变化,其实在ExtJS中一点都不难,只需要几行代码即可,代码如下(在此申明,此处代码是从网上搜集而来):
var aWeek = [ '星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ];
varcurrentTime = newExt.Toolbar.TextItem(new Date().format('Y-m-d H:i:s') +' ' + aWeek[newDate().getDay()]);
Ext.TaskMgr.start({
run: function(){
Ext.fly(currentTime.getEl()).update(
new Date().format('Y-m-d H:i:s') + ' '+ aWeek[newDate().getDay()]);
},
interval: 1000
});
我们把变量currentTime放在我们想放的地方就可以了。
4 将数据导出到Excel中
在ExtJS中很容易实现导出数据,我们只需要在按钮tbar中增加一个导出按钮即可,代码如下:
{
text: '导出',
handler: function(){
var vExportContent =tab_grid_applicant.getExcelXml();
if (Ext.isIE6 || Ext.isIE7|| Ext.isSafari|| Ext.isSafari2 || Ext.isSafari3){
var fd = Ext.get('frmDummy');
if (!fd) {
fd= Ext.DomHelper.append(Ext.getBody(),{
tag: 'form',
method: 'post',
id: 'frmDummy',
action:'util/gridToexcel.jsp',
target: '_blank',
name: 'frmDummy',
cls: 'x-hidden',
cn: [ {
tag : 'input',
name : 'exportContent',
id: 'exportContent',
type: 'hidden'
} ] }, true); }
fd.child('#exportContent').set({value :vExportContent});
fd.dom.submit();
}else{
document.location= 'data:application/vnd.ms-excel;base64,'
+Base64.encode(vExportContent);
}
}
}
当然,我们还需要一个额外的gridToExcel.js文件,由于gridToExcel.js文件内容太长,在这就不粘贴了,直接百度gridToExcel.js就能找到里面的代码。
好了,四个问题终于介绍完了。在这也要强调一句,问题是解决不完的,解决某个问题不是我们的最终目的,而是从每次解决问题的过程中总结出解决问题的方法,这样才能有利于我提高自己的工作能力。