1.首先去jmesa网站下载一个zip包,当前是最新4.0版本,不过我为了稳定,还是下载了3.0.4版本。下载地址:http://code.google.com/p/jmesa/downloads/detail?name=jmesa-3.0.4.zip
2.下载完成之后,解压缩,找到dist文件下jmesa-3.0.4.jar导入到自己的项目中。同时将该目录下的jmesa.css、jmesa.min.js、jquery.jmesa.min.js复制到自己的项目相应的位置下。
找一个jquery的js,例如jquery-1.5.1.min.js文件也复制到相应的位置下。
将这三个js文件依次引入你的jsp页面,注意是依次:
<script type="text/javascript" src="${ctx}/resources/js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="${ctx}/resources/js/jmesa.min.js"></script>
<script type="text/javascript" src="${ctx}/resources/js/jquery.jmesa.js"></script>
若把jquery脚本放到后面,页面会提示错误找不到JQuery之类的错误。
3.咦,第三步好像没有什么。。嘿嘿。丢了~
4.将解压缩文件下的images下png文件夹复制到你的项目的相应位置。
5.配置相应的jmesa.properties文件。自己在WEB-INF目录下新建一个jmesa.properties文件,然后可以自由设定一些值,在该配置文件中可以控制页面如何显示信息。
例:limit.rowSelect.maxRows=10每页将显示10行数据
html.toolbar.maxRowsDroplist.increments=10,20,60每页的数据行数可以在10,20,60之间进行切换
html.imagesPath=/resources/images/png/表示jmesa默认的图片存放的位置,这个就是你之前复制的png文件夹所存放的位置啦
注意:这里是配置文件中一些相应的设置:可以自己添加
html.statusbar.resultsFound=Results {1} - {2} of {0}.
html.statusbar.noResultsFound=There were no results found.
html.toolbar.tooltip.firstPage=First Page
html.toolbar.tooltip.lastPage=Last Page
html.toolbar.tooltip.prevPage=Previous Page
html.toolbar.tooltip.nextPage=Next Page
html.toolbar.tooltip.filter=Filter
html.toolbar.tooltip.clear=Clear
html.toolbar.tooltip.saveWorksheet=Save Worksheet
html.toolbar.tooltip.filterWorksheet=Filter Worksheet
html.toolbar.tooltip.excel=XLS Export
html.toolbar.tooltip.jexcel=XLS Export
html.toolbar.tooltip.pdf=PDF Export
html.toolbar.tooltip.pdfp=PDF Export
html.toolbar.tooltip.csv=CSV Export
html.toolbar.tooltip.xml=XML Export
html.toolbar.text.firstPage=First
html.toolbar.text.lastPage=Last
html.toolbar.text.nextPage=Next
html.toolbar.text.prevPage=Prev
html.toolbar.text.filter=Filter
html.toolbar.text.clear=Clear
html.toolbar.text.saveWorksheet=Save Worksheet
html.toolbar.text.filterWorksheet=Filter Worksheet
html.toolbar.text.excel=XLS
html.toolbar.text.jexcel=XLS
html.toolbar.text.pdf=PDF
html.toolbar.text.pdfp=PDF
html.toolbar.text.csv=CSV
html.toolbar.text.xml=XML
6.配置相应的web.xml,在里面添加:
<context-param>//APP将2中的配置信息读取
<param-name>jmesaPreferencesLocation</param-name>
<param-value>WEB-INF/jmesa.properties</param-value>
</context-param>
<context-param>//后台table实现国家化的配置文件
<param-name>jmesaMessagesLocation</param-name>
<param-value>messages/message_info</param-value>
</context-param>
messages表示国际化文件存放的文件夹,message_info表示国际化文件的名字开头。
比如 message_info_zh_CN.properties message_info_zh_HK.properties等等。
7.如果要在spring里面添加国际化支持的话,就要配置spring.xml文件,在里面添加:
<!--i18n设置默认语言是繁体-->
<beanid="localeResolver"class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<propertyname="defaultLocale"value="zh_HK"></property>
</bean>
<beanid="localeChangeInterceptor"class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
8.jmesa实现分页可以采用两种方法:a.标签实现b.java代码进行页面构造
以下将采用方式b。
a.某controller的跳转方法
publicModelAndView gostaff(HttpServletRequest request,
HttpServletResponse response)throws Exception {
ModelAndView view = newModelAndView();
//构造id为staffInfo的table
TableModeltableModel = newTableModel("staffInfo",request,response);
//为tableModel添加数据
tableModel.setItems(newPageItems() {
@Override
publicint getTotalRows(Limit limit) {
//TODO Auto-generated method stub
returnstaffManager.getStaffTotalRowService();
}
@Override
publicCollection<?> getItems(Limit limit) {
//TODO Auto-generated method stub
intendRow = limit.getRowSelect().getRowEnd();//获取当前最后一条数据的行数
intstartRow =limit.getRowSelect().getRowStart();//获取当前第一天数据的行数
returnstaffManager.queryAllStaff(startRow,endRow);
}
});
//利用getHtmlTable()来构造table的具体的样式
tableModel.setTable(getHtmlTable());
//将tableModel对象转换成一个字符串到前台会进行解析
request.setAttribute("staffInfo",tableModel.render());
view.setViewName("staff/staffIndex1");
return view;
}
//构造相应的table样式
private TablegetHtmlTable() {
//创建HtmlTable 对象 实质上就是HTML的<table></table>
HtmlTable htmlTable = new HtmlTable().width("910");
//table的标题实现国际化需要在web.xml文件中进行配置
htmlTable.setCaptionKey("title");
//创建HtmlRow 实质上HTML的<tr></tr>
HtmlRow row = new HtmlRow();
htmlTable.setRow(row);//table设置相应的行
//指定相应的列信息 "username"对应相应的对象的属性"StaffName"是table显示时的列名,当列名需要实现国际化时,调用.titleKey("配置文件中的key值")
HtmlColumn staffName = new HtmlColumn("username").title("StaffName");
row.addColumn(staffName);
HtmlColumn pwd = newHtmlColumn("password").title("Psassword");
row.addColumn(pwd);
HtmlColumn email = new HtmlColumn("email").title("Email");
row.addColumn(email);
HtmlColumn phoneNumber = new HtmlColumn("mobilePhone");
row.addColumn(phoneNumber);
HtmlColumn telphone = new HtmlColumn("telphone");
row.addColumn(telphone);
//表格的某一列需要显示对象的对象属性的值直接"."
HtmlColumn registerNum = newHtmlColumn("companyCop.registerNum").title("RegisterNum");
row.addColumn(registerNum);
//当需要显示的值是Hashset中的对象属性时,需要创建CellEditor()进行遍历取出,需要的属性值
HtmlColumncompanyName = new HtmlColumn("companyCpn").title("CompanyName");
companyName.setCellEditor(new CellEditor() {
@Override
publicObject getValue(Object item, String property, int rowcount){
// TODOAuto-generated method stub
Set<CompanyNameCpn> setCName =((StaffStf)item).getCompanyCop().getCompanyNameCpns();
String cName = "";
if(setCName.size()!=0){
for(int i=0;i<setCName.size();i++){
cName = setCName.iterator().next().getName();
}
}
return cName;
}
});
row.addColumn(companyName);
//table中的某一列需要以链接的形式显示
HtmlColumn detail = new HtmlColumn().title("Detail");
detail.setCellEditor(new CellEditor() {
@Override
publicObject getValue(Object item, String property, int rowcount){
// TODOAuto-generated method stub
//动态的将查找出的数据已连接的形式显示
//Object value = new HtmlCellEditor().getValue(item, property,rowcount);
HtmlBuilder html = new HtmlBuilder();
html.a().href().quote().append("点击链接所发送的请求").quote().close();
html.append("Detail");//链接显示的内容
html.aEnd();
return html.toString();
}
});
row.addColumn(detail);
HtmlColumn update = new HtmlColumn().title("Update");
update.setCellEditor(new CellEditor() {
@Override
public ObjectgetValue(Object item, String property, int rowcount) {
// TODO Auto-generated method stub
//Object value = new HtmlCellEditor().getValue(item, property,rowcount);
HtmlBuilder html = new HtmlBuilder();
html.a().href().quote().append("").quote().close();
html.append("Update");
html.aEnd();
return html.toString();
}
});
row.addColumn(update);
HtmlColumn delete = new HtmlColumn().title("Delete");
delete.setCellEditor(new CellEditor() {
@Override
public ObjectgetValue(Object item, String property, int rowcount) {
// TODO Auto-generated method stub
//Object value = new HtmlCellEditor().getValue(item, property,rowcount);
HtmlBuilder html = new HtmlBuilder();
html.a().href().quote().append("").quote().close();
html.append("Delete");
html.aEnd();
return html.toString();
}
});
row.addColumn(delete);
return htmlTable;
}
9.对应的jsp页面的写法:除了要在页面头部引入相应的js文件之外,还要添加两个js方法。
<script type="text/javascript">
functiononInvokeAction(id) {
$.jmesa.createHiddenInputFieldsForLimitAndSubmit(id);//打印excel等时候调用
}
functiononInvokeExportAction(id) { //点击上一页下一页调用
varparameterString = $.jmesa.createParameterStringForLimit(id);
location.href= '${ctx}/xxx/list.do?&'+ parameterString; //这个就是你请求调用table的url请求路径
}
</script>
那么,如何将后台生成的htmltable显示到jsp页面呢?就是下面了,很简单:
<form name="staffForm" style="width:600px;">
<div id="staffInfo">
${staffInfo}
<!--与后台代码相对应request.setAttribute("staffInfo",tableModel.render());-->
</div>
</form>
好了,就这样配完了。。没有了吗,亲~