Struts分页的一个实现
在Web应用程序里,分页总让我们开发人员感到很头疼,倒不是因为技术上有多么困难,只是本来和业务没有太多关系的这么一个问题,你却得花不少功夫来处理。要是稍不留神,时不时出点问题就更郁闷了。我现在做的一个项目也到了该处理分页的时候了,感觉以前处理得都不好,所以这次有所改变,基本目标是在现有(未分页)的代码基础上,尽量少做修改,并且同样的代码可以应用于不同模块的分页。以下就是我用的方法:
首先,考虑分页绝大多数发生在列表时,组合查询时也需要用到。在我的项目里,列表的Action一般名字为ListXXXActioin,例如客户列表是ListClientsAction等等。在未分页前,ListXXXAction里会把所有的对象取出,通过request.setAttribute()放在request里,然后将请求转向到列表的jsp(例如listClients.jsp)显示出来(你可能会说不要在Action里放业务逻辑,但现在这不是我们考虑的重点)。而分页后,我们只取用户请求页对应的那些对象。为了最大限度的达到代码重用,我做了以下工作:
1、新建一个Pager类,该类有beginPage、endPage、currentPage、pageSize和total等int类型的属性,分别代表开始页、结束页、当前页、每页记录数和总记录数,它主要是让jsp页面显示页导航使用的。请注意currentPage属性是从0开始的。
2、新建一个AbstractListActioin类,并让所有ListXXXAction都继承它。在这个类里覆盖execute()方法,可以在这里判断权限等等,并在判断权限通过后执行一个abstract的act()方法,这个act()由ListXXXAction来实现。
3、在AbstractListAction里增加getPage()方法,用来从request得到用户请求的页码(若未请求则认为是第0页):
protected int getPage(HttpServletRequest request) {
String p = request.getParameter("p");
if (p == null)
return 0;
else
try {
return Integer.parseInt(p);
} catch (NumberFormatException e) {
return 0;
}
}
String p = request.getParameter("p");
if (p == null)
return 0;
else
try {
return Integer.parseInt(p);
} catch (NumberFormatException e) {
return 0;
}
}
4、在AbstractListAction里增加makePager()方法,用来向request里增加一个Pager类的实例,供jsp页面显示页导航:
protected Pager makePager(HttpServletRequest request, int total) {
Pager pager=new Pager();
pager.setTotal(total);
pager.setPageSize(Config.getInstance().getPageSize());
pager.setBeginPage(0);
pager.setEndPage(((pager.getTotal()) - 1) / pager.getPageSize() + 1);
pager.setCurrentPage(getPage(request));
return pager;
}
Pager pager=new Pager();
pager.setTotal(total);
pager.setPageSize(Config.getInstance().getPageSize());
pager.setBeginPage(0);
pager.setEndPage(((pager.getTotal()) - 1) / pager.getPageSize() + 1);
pager.setCurrentPage(getPage(request));
return pager;
}
Tags: 分页
<html:multibox>要比<html:checkbox>更灵活。它会把用户界面上面选择的复选框中的信息封装在一个数组里面,数组存在于Form中,并通过用户提交在Action中取得。
如下例所示:
JSP页面:
如下例所示:
JSP页面:
复制内容到剪贴板 程序代码
<body>
<html:messages id="message" message="true">
<bean:write name="message"/>
</html:messages>
<html:form action="box.do" method="POST">
<html:text property="name">
<html:messages id="message" message="true">
<bean:write name="message"/>
</html:messages>
<html:form action="box.do" method="POST">
<html:text property="name">
最简单的文件上传方法
文件上传是基本运用,因而讨论的也多,方法五花八门。那么什么样的方法是最好的方法呢,应该是代码最少,最好理解的方法。
用标签处理文件上传,几个属性控制文件大小、文件类型等特性,应是最理想的方法。
newxy(新坐标)用标签来处理文件上传,不用写代码,比smartUpload简便。
上 传 文 件 至 文 件 夹
利用newxy(新坐标)技术上传文件至文件夹极其简单。
一、准备
1、确保有struts运行环境;
2、下载newxy1.03.zip或更高版。解压,将newxy1.03.jar或更高版类库拷到WEB-INF/lib下,将newxy-html.tld、newxy-logic.tld、newxy-bean.tld三个标签定义文件拷到WEB-INF/目录下;
3、建一jsp文件,如upload.jsp
Tags: 上传文件
在程序开发中,或在挑选程序员时,我们更多的是考查他的智力因素,而人格因素往往容易被忽略,造成了后来管理上的很多问题,我并不是说智力不重要,而是要强调人格与智力同样的重要。事实上,从国内大多IT企业所研发的产品或项目来看,其实并不需要太高的智力,国内大部分的程序员都具有本科或硕士以上的学历,有时想想真是大才小用,而且往往又用得不好,真是百思不得其解,也许产品或项目的成功与否更多的是由项目经理与程序员们的人格因素决定的,他们的人格因素都会在他们所编写的软件系统的各个部分中得到体现,比如软件界面、操作方便性、软件质量问题、可扩充性、可维护性等等。
那什么是人格呢?书上写:人格是指一个人所有性格特点的总和,人格必然会体现在我们的一言一行之中。也就是说程序员的人格将会体现在他所编写的程序之中。现实也确是如此,如果你是一个软件测试员,那么你的体会可能就很深,测试着不同程序员的不同软件模块,那结果与感受真是不一样,有的模块整洁干净,极少出现低级错误,逻辑清晰,而有的模块虽然也基本上实现了所有功能,但界面乱七八糟,小错误层出不穷,真是让人爱恨交加,那到底是哪些人格特点在程序开发中起着关键的作用呢?
一. 在高压力的坏境避也能坚持不懈地工作
对于程序员来说,加班应是一件再正常不过的事情,有时项目紧迫,也会采用封闭式的开发,即几个人关在一个屋,连续工作一个多月,有些BOSS看似好人一个,将这个屋安排在有如世外桃源之地,实际上程序员对外面的美景并不感冒,置身于红花绿树之中,心中却不停地思考CODING,呵呵,那是不好受的。因此,就当今的程序开发工作而言,如果一个程序员缺乏在高压力的环境中坚持工作半个月的能力,或许我们就可以肯定地说,他不是块程序员的材料。
二. 适应快速的变化
那什么是人格呢?书上写:人格是指一个人所有性格特点的总和,人格必然会体现在我们的一言一行之中。也就是说程序员的人格将会体现在他所编写的程序之中。现实也确是如此,如果你是一个软件测试员,那么你的体会可能就很深,测试着不同程序员的不同软件模块,那结果与感受真是不一样,有的模块整洁干净,极少出现低级错误,逻辑清晰,而有的模块虽然也基本上实现了所有功能,但界面乱七八糟,小错误层出不穷,真是让人爱恨交加,那到底是哪些人格特点在程序开发中起着关键的作用呢?
一. 在高压力的坏境避也能坚持不懈地工作
对于程序员来说,加班应是一件再正常不过的事情,有时项目紧迫,也会采用封闭式的开发,即几个人关在一个屋,连续工作一个多月,有些BOSS看似好人一个,将这个屋安排在有如世外桃源之地,实际上程序员对外面的美景并不感冒,置身于红花绿树之中,心中却不停地思考CODING,呵呵,那是不好受的。因此,就当今的程序开发工作而言,如果一个程序员缺乏在高压力的环境中坚持工作半个月的能力,或许我们就可以肯定地说,他不是块程序员的材料。
二. 适应快速的变化