jmesa之Toolbar

jmesa的分页工具栏显示的分页方式一直觉得不太合理,并没有像JE分页的那种方式,显示12345页,而是直接用前后页来表示,而且官方也没有相应的文档说明(至少目前还没有),不过官方有一个关于Toolbar的例子,这也好,不然毫无头绪的去看源码,也太痛苦了点。

默认的工具栏选项类源码是这样的:


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

把上面的值改成相应的数字即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值