论坛首页 Java企业应用论坛

jmesa之Toolbar

浏览 1866 次
锁定老帖子 主题:jmesa之Toolbar
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-23   最后修改:2009-11-23
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

把上面的值改成相应的数字即可。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics