`

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

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

相关推荐

    jmesa使用说明文档

    1. **Toolbar 设置**:可以设置工具栏,例如添加排序和过滤功能。 2. **CSS 效果设置**:通过 API 设置表格样式,比如宽度、高度等。 ```java 列名.setStyle("width:1px"); ``` 3. **禁用功能**:如果需要,可以...

    Android自定义toolbar布局

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

    ToolBar居中添加控件

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

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

    在VB6.0(Visual Basic 6.0)中,`Toolbar`是一个非常重要的控件,它用于创建用户界面中的工具栏。工具栏通常包含一系列的按钮,这些按钮代表了程序中的常用功能,使得用户可以快速访问和执行操作,极大地提高了软件...

    ToolbarDemo 事项toolbar功能

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

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

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

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

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

    Activity之AppCompatActivity与toolbar的结合

    ### Activity之AppCompatActivity与Toolbar的结合 随着Android开发框架的不断演进,为了更好地支持不同版本的Android系统以及实现统一的用户体验,Google不断推出新的API和技术。从API 22开始,Google不再推荐使用`...

    Android之ToolBar的使用

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

    Android ToolBar使用图标、菜单事件示例

    在Android应用开发中,`ToolBar`是Android支持库提供的一种可自定义的顶部导航组件,它取代了早期版本中的`ActionBar`,提供了更多的定制性和灵活性。`ToolBar`的设计旨在符合Material Design规范,使得应用程序看...

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

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

    ToolBar的Demo实战

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

    toolbar

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

    ToolBar在Toolbartray中的拖动

    在Windows编程领域,`ToolBar`和`ToolbarTray`是两个关键组件,它们在创建具有丰富用户界面的应用程序时起到重要作用。`ToolBar`通常用于显示一排按钮,这些按钮代表了应用程序的不同功能或操作,而`ToolbarTray`则...

    ToolBar上添加滚动条和下拉框

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

    toolbar示范_VB基础菜单栏和toolbar的使用_

    在VB(Visual Basic)编程环境中,菜单栏和ToolBar是用户界面设计的重要组成部分,它们提供了直观、易用的交互方式,使用户能轻松访问程序的各种功能。本教程将深入讲解VB基础菜单栏的创建与使用,以及如何利用微软...

    ToolBar 样式更改Demo

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

    监听列表滚动来隐藏或显示Toolbar与浮动按钮

    在Android应用开发中,我们经常需要根据用户交互来动态调整界面元素的可见性,例如当用户滚动列表时,隐藏或显示顶部的ToolBar以及悬浮动作按钮(Floating Action Button, FAB)。这种效果能提供更好的用户体验,...

    C#实现toolbar示例程序

    在C#编程环境中,ToolBar控件是一个非常常用且实用的组件,它允许开发者在应用程序界面中创建工具栏,展示各种按钮、菜单项或其他操作控件,以方便用户快速执行常见任务。本示例程序“C#实现toolbar”旨在教你如何在...

    bitmap类型的toolbar

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

Global site tag (gtag.js) - Google Analytics