jmesa的分页工具栏显示的分页方式一直觉得不太合理,并没有像JE分页的那种方式,显示12345页,而是直接用前后页来表示,而且官方也没有相应的文档说明(至少目前还没有),不过官方有一个关于Toolbar的例子,这也好,不然毫无头绪的去看源码,也太痛苦了点。
默认的工具栏选项类源码是这样的:
上面说了,enablePageNumbers好像没有什么作用,只有手动实现一个工具栏的类,然后直接添加ToolbarItemType.PAGE_NUMBER_ITEMS参数,官方有一个例子,这个例子还添加了一个自定义的图形按钮,一并写上来,于是自定义的工具栏类就像下面这样:
其中有张图片custom.png放在images/table目录即可。
自定义工具栏类写好以后,把它放入相应的tableFacade,注意放的位置最后是放在render方法调用之前即可,如:
最后还要在JSP中设置一下:
现在就可以在相应的JSP页面看见数字分页了,默认的方式是显示当前页的前后5页,当然也可以手动修改配置文件:
html.toolbar.maxPageNumbers=5
把上面的值改成相应的数字即可。
默认的工具栏选项类源码是这样的:
public class HtmlToolbar extends AbstractToolbar {
@SuppressWarnings("unchecked")
@Override
public String render() {
if (hasToolbarItems()) { // already has items
return super.render();
}
addToolbarItem(ToolbarItemType.FIRST_PAGE_ITEM);
addToolbarItem(ToolbarItemType.PREV_PAGE_ITEM);
//AbstractToolbar有个enablePageNumbers方法,用于设置显示数字的页是否可用,但
//本人试着新创建HtmlToolbar对象,然后将enablePageNumbers的值设为true,然后将它重新放回tableFacade,结果还是一样,换了几个位置,都没成功,估计是系统的bug
if (enablePageNumbers) {
addToolbarItem(ToolbarItemType.PAGE_NUMBER_ITEMS);
}
addToolbarItem(ToolbarItemType.NEXT_PAGE_ITEM);
addToolbarItem(ToolbarItemType.LAST_PAGE_ITEM);
if (enableSeparators) {
addToolbarItem(ToolbarItemType.SEPARATOR);
}
MaxRowsItem maxRowsItem = (MaxRowsItem) addToolbarItem(ToolbarItemType.MAX_ROWS_ITEM);
if (getMaxRowsIncrements() != null) {
maxRowsItem.setIncrements(getMaxRowsIncrements());
}
boolean exportable = ViewUtils.isExportable(getExportTypes());
if (exportable && enableSeparators) {
addToolbarItem(ToolbarItemType.SEPARATOR);
}
if (exportable) {
addExportToolbarItems(getExportTypes());
}
Row row = getTable().getRow();
List columns = row.getColumns();
boolean filterable = ViewUtils.isFilterable(columns);
if (filterable && enableSeparators) {
addToolbarItem(ToolbarItemType.SEPARATOR);
}
if (filterable) {
addToolbarItem(ToolbarItemType.FILTER_ITEM);
addToolbarItem(ToolbarItemType.CLEAR_ITEM);
}
boolean editable = ViewUtils.isEditable(getCoreContext().getWorksheet());
if (editable && enableSeparators) {
addToolbarItem(ToolbarItemType.SEPARATOR);
}
if (editable) {
addToolbarItem(ToolbarItemType.SAVE_WORKSHEET_ITEM);
addToolbarItem(ToolbarItemType.FILTER_WORKSHEET_ITEM);
}
return super.render();
}
}
上面说了,enablePageNumbers好像没有什么作用,只有手动实现一个工具栏的类,然后直接添加ToolbarItemType.PAGE_NUMBER_ITEMS参数,官方有一个例子,这个例子还添加了一个自定义的图形按钮,一并写上来,于是自定义的工具栏类就像下面这样:
public class CustomToolbar extends AbstractToolbar {
@Override
public String render() {
addToolbarItem(ToolbarItemType.FIRST_PAGE_ITEM);
addToolbarItem(ToolbarItemType.PREV_PAGE_ITEM);
addToolbarItem(ToolbarItemType.NEXT_PAGE_ITEM);
addToolbarItem(ToolbarItemType.LAST_PAGE_ITEM);
addToolbarItem(ToolbarItemType.SEPARATOR);
addToolbarItem(ToolbarItemType.PAGE_NUMBER_ITEMS);
ImageItemImpl item = new ImageItemImpl();
item.setCode("custom-item");
item.setTooltip("Hello World");
item.setImage(getImage("custom.png", getWebContext(), getCoreContext()));
item.setAlt("custom");
ToolbarItemRenderer renderer = new CustomItemRenderer(item, getCoreContext());
renderer.setOnInvokeAction("onInvokeAction");
item.setToolbarItemRenderer(renderer);
addToolbarItem(item);
MaxRowsItem maxRowsItem = (MaxRowsItem) addToolbarItem(ToolbarItemType.MAX_ROWS_ITEM);
if (getMaxRowsIncrements() != null) {
maxRowsItem.setIncrements(getMaxRowsIncrements());
}
boolean exportable = ViewUtils.isExportable(getExportTypes());
if (exportable) {
addToolbarItem(ToolbarItemType.SEPARATOR);
addExportToolbarItems(getExportTypes());
}
Row row = getTable().getRow();
List columns = row.getColumns();
boolean filterable = ViewUtils.isFilterable(columns);
if (filterable) {
addToolbarItem(ToolbarItemType.SEPARATOR);
addToolbarItem(ToolbarItemType.FILTER_ITEM);
addToolbarItem(ToolbarItemType.CLEAR_ITEM);
}
boolean editable = ViewUtils.isEditable(getCoreContext().getWorksheet());
if (editable) {
addToolbarItem(ToolbarItemType.SEPARATOR);
addToolbarItem(ToolbarItemType.SAVE_WORKSHEET_ITEM);
addToolbarItem(ToolbarItemType.FILTER_WORKSHEET_ITEM);
}
addToolbarItem(ToolbarItemType.SEPARATOR);
return super.render();
}
private static String getImage(String image, WebContext webContext, CoreContext coreContext) {
String imagesPath = HtmlUtils.imagesPath(webContext, coreContext);
return imagesPath + image;
}
private static class CustomItemRenderer extends AbstractItemRenderer {
public CustomItemRenderer(ToolbarItem item, CoreContext coreContext) {
setToolbarItem(item);
setCoreContext(coreContext);
}
public String render() {
ToolbarItem item = getToolbarItem();
StringBuilder action = new StringBuilder("javascript:");
action.append("alert('Hello World')");
item.setAction(action.toString());
return item.enabled();
}
}
}
其中有张图片custom.png放在images/table目录即可。
自定义工具栏类写好以后,把它放入相应的tableFacade,注意放的位置最后是放在render方法调用之前即可,如:
tableFacade.setToolbar(new CustomToolbar());
return tableFacade.render();
最后还要在JSP中设置一下:
<jmesa:tableFacade .... toolbar="com.util.CustomToolbar">
现在就可以在相应的JSP页面看见数字分页了,默认的方式是显示当前页的前后5页,当然也可以手动修改配置文件:
html.toolbar.maxPageNumbers=5
把上面的值改成相应的数字即可。