`

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

把上面的值改成相应的数字即可。
分享到:
评论

相关推荐

    Android自定义toolbar布局

    在Android开发中,`Toolbar`已经取代了传统的`ActionBar`,成为新的导航和展示应用元数据的组件。它提供了一种更加灵活的方式来定制顶部栏,从而实现与Material Design设计规范相一致的用户界面。本教程将详细介绍...

    ToolBar居中添加控件

    在Android开发中,`ToolBar`是App界面设计中常用的一个组件,它作为Activity或Fragment的顶部栏,可以提供导航、菜单和其他操作。本教程将详细讲解如何在`ToolBar`中居中添加自定义控件,以提升应用界面的美观度和...

    Android之ToolBar和自定义ToolBar实现沉浸式状态栏

    在Android应用开发中,ToolBar是Android Support Library提供的一种可定制化的顶部导航组件,它替代了传统的ActionBar,使得设计更加灵活且符合Material Design的设计规范。本文将深入探讨如何使用ToolBar以及如何...

    ToolbarDemo 事项toolbar功能

    本教程将详细讲解如何在Android项目中实现`Toolbar`以及与之相关的弹出框功能。 一、`Toolbar`的基本使用 1. 添加依赖:首先,在`build.gradle`文件中添加对Design Support Library的支持。通常在dependencies块下...

    toolbar实例程序(两种动态创建toolbar的方法,还有带提示的toolbar)

    在Android开发中,Toolbar作为Action Bar的替代品,被广泛应用于各类应用的界面设计中,提供了自定义性和灵活性。这个"toolbar实例程序"包含了两种不同的动态创建Toolbar的方法以及如何实现带有提示功能的Toolbar,...

    toolbar示范_VB6.0的toolbar使用示范_

    一个VB6.0的toolbar的使用示范,toolbar是很好用的控件

    Android之ToolBar的使用

    Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比, Toolbar 明显要灵活...

    Toolbar基本使用及Toolbar+ListView实现滑动变色

    在Android应用开发中,Toolbar是Android 5.0(Lollipop)引入的一个组件,它作为ActionBar的替代品,提供了更多的自定义性和灵活性。本教程将详细介绍Toolbar的基本使用,并结合ListView探讨如何实现滑动变色的效果...

    toolbar

    在Android开发中,`Toolbar`是一个非常重要的组件,它作为Action Bar的替代品引入,提供了更灵活的定制和布局选项。本示例将深入探讨`Toolbar`的使用方法及其相关知识点,帮助开发者更好地理解和应用这一功能强大的...

    ToolBar上添加滚动条和下拉框

    在IT行业中,`ToolBar`是一种常见的用户界面组件,主要用于在应用程序顶部展示一组工具或操作按钮,使得用户可以方便地访问和执行常用功能。本话题主要探讨如何在`ToolBar`上添加滚动条和下拉框,并实现它们之间的...

    ToolBar的Demo实战

    ToolBar是Android开发中常见的一种组件,它在API Level 21(Android Lollipop)被引入,作为ActionBar的替代品,提供了更加灵活的定制能力和更好的视觉效果。本项目"ToolBar的Demo实战"旨在通过一个简单的实例,帮助...

    ToolBar 样式更改Demo

    在Android开发中,`ToolBar`是App界面设计中不可或缺的一部分,它通常位于Activity或Fragment的顶部,用作应用的导航栏。`ToolBar`是自Android 5.0(API级别21)开始引入的,作为`ActionBar`的替代品,提供了更灵活...

    bitmap类型的toolbar

    本篇文章将深入探讨如何在MFC应用中实现“bitmap类型的toolbar”以及其可移动特性。 首先,我们需要理解Bitmap Toolbar的概念。Bitmap Toolbar是一种特殊的toolbar,它的每个按钮不是由系统提供的标准图标,而是...

    简单的TOOLBAR实现

    在Android应用开发中,`ToolBar`是一个非常重要的组件,它为开发者提供了自定义化顶部导航栏的功能,替代了传统的`Action Bar`。本教程将基于`Android Studio`,讲解如何实现一个简单的`ToolBar`,包括设置主标题、...

    安卓toolBar

    【Android Toolbar】是Android开发中的一个关键组件,它在API 21(Lollipop)版本引入,用以替代传统的ActionBar,提供了更多的自定义能力和更好的设计兼容性。在Android应用开发中,Toolbar通常作为Activity或...

    PB大图标toolbar实例

    PB大图标toolbar实例是PowerBuilder (PB)编程中一个典型的用户界面设计案例,主要用于提升应用软件的用户体验。在PowerBuilder 9(PB9)中,toolbar是一种常用的图形用户界面元素,它提供了一种直观的方式来执行各种...

    Toolbar menu 菜单的学习与实现2

    在Android应用开发中,Toolbar作为Action Bar的替代品,已经成为主流的导航组件。它不仅可以提供一个自定义的外观,还能方便地添加菜单项,增强应用的功能。本篇将深入探讨如何学习和实现Toolbar中的菜单(Menu)...

    Toolbar随滚动透明效果

    在Android应用开发中,"Toolbar随滚动透明效果"是一种常见的界面设计技巧,它使得应用程序的顶部导航栏(通常是Toolbar或ActionBar)随着用户滚动内容而逐渐变得透明或半透明。这种效果能够提供更好的用户体验,因为...

    仿今日头条的ToolBar

    "仿今日头条的ToolBar"这个标题指出我们将探讨一个特定的UI设计实践,即如何模仿知名新闻应用“今日头条”中的ToolBar组件。ToolBar在Android应用开发中扮演着重要角色,它是Android Material Design规范中定义的一...

    ToolBarDemo

    【ToolBarDemo】是一个基于Material Design设计风格的Android应用示例,主要展示了如何在项目中集成并使用ToolBar。Material Design是谷歌推出的一种现代化的界面设计语言,它提供了丰富的交互效果和统一的设计规范...

Global site tag (gtag.js) - Google Analytics