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
把上面的值改成相应的数字即可。
分享到:
- 2009-11-23 13:42
- 浏览 2375
- 评论(0)
- 论坛回复 / 浏览 (0 / 1862)
- 查看更多
相关推荐
在Android开发中,`Toolbar`已经取代了传统的`ActionBar`,成为新的导航和展示应用元数据的组件。它提供了一种更加灵活的方式来定制顶部栏,从而实现与Material Design设计规范相一致的用户界面。本教程将详细介绍...
在Android开发中,`ToolBar`是App界面设计中常用的一个组件,它作为Activity或Fragment的顶部栏,可以提供导航、菜单和其他操作。本教程将详细讲解如何在`ToolBar`中居中添加自定义控件,以提升应用界面的美观度和...
在Android应用开发中,ToolBar是Android Support Library提供的一种可定制化的顶部导航组件,它替代了传统的ActionBar,使得设计更加灵活且符合Material Design的设计规范。本文将深入探讨如何使用ToolBar以及如何...
本教程将详细讲解如何在Android项目中实现`Toolbar`以及与之相关的弹出框功能。 一、`Toolbar`的基本使用 1. 添加依赖:首先,在`build.gradle`文件中添加对Design Support Library的支持。通常在dependencies块下...
在Android开发中,Toolbar作为Action Bar的替代品,被广泛应用于各类应用的界面设计中,提供了自定义性和灵活性。这个"toolbar实例程序"包含了两种不同的动态创建Toolbar的方法以及如何实现带有提示功能的Toolbar,...
一个VB6.0的toolbar的使用示范,toolbar是很好用的控件
Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比, Toolbar 明显要灵活...
在Android应用开发中,Toolbar是Android 5.0(Lollipop)引入的一个组件,它作为ActionBar的替代品,提供了更多的自定义性和灵活性。本教程将详细介绍Toolbar的基本使用,并结合ListView探讨如何实现滑动变色的效果...
在Android开发中,`Toolbar`是一个非常重要的组件,它作为Action Bar的替代品引入,提供了更灵活的定制和布局选项。本示例将深入探讨`Toolbar`的使用方法及其相关知识点,帮助开发者更好地理解和应用这一功能强大的...
在IT行业中,`ToolBar`是一种常见的用户界面组件,主要用于在应用程序顶部展示一组工具或操作按钮,使得用户可以方便地访问和执行常用功能。本话题主要探讨如何在`ToolBar`上添加滚动条和下拉框,并实现它们之间的...
ToolBar是Android开发中常见的一种组件,它在API Level 21(Android Lollipop)被引入,作为ActionBar的替代品,提供了更加灵活的定制能力和更好的视觉效果。本项目"ToolBar的Demo实战"旨在通过一个简单的实例,帮助...
在Android开发中,`ToolBar`是App界面设计中不可或缺的一部分,它通常位于Activity或Fragment的顶部,用作应用的导航栏。`ToolBar`是自Android 5.0(API级别21)开始引入的,作为`ActionBar`的替代品,提供了更灵活...
本篇文章将深入探讨如何在MFC应用中实现“bitmap类型的toolbar”以及其可移动特性。 首先,我们需要理解Bitmap Toolbar的概念。Bitmap Toolbar是一种特殊的toolbar,它的每个按钮不是由系统提供的标准图标,而是...
在Android应用开发中,`ToolBar`是一个非常重要的组件,它为开发者提供了自定义化顶部导航栏的功能,替代了传统的`Action Bar`。本教程将基于`Android Studio`,讲解如何实现一个简单的`ToolBar`,包括设置主标题、...
【Android Toolbar】是Android开发中的一个关键组件,它在API 21(Lollipop)版本引入,用以替代传统的ActionBar,提供了更多的自定义能力和更好的设计兼容性。在Android应用开发中,Toolbar通常作为Activity或...
PB大图标toolbar实例是PowerBuilder (PB)编程中一个典型的用户界面设计案例,主要用于提升应用软件的用户体验。在PowerBuilder 9(PB9)中,toolbar是一种常用的图形用户界面元素,它提供了一种直观的方式来执行各种...
在Android应用开发中,Toolbar作为Action Bar的替代品,已经成为主流的导航组件。它不仅可以提供一个自定义的外观,还能方便地添加菜单项,增强应用的功能。本篇将深入探讨如何学习和实现Toolbar中的菜单(Menu)...
在Android应用开发中,"Toolbar随滚动透明效果"是一种常见的界面设计技巧,它使得应用程序的顶部导航栏(通常是Toolbar或ActionBar)随着用户滚动内容而逐渐变得透明或半透明。这种效果能够提供更好的用户体验,因为...
"仿今日头条的ToolBar"这个标题指出我们将探讨一个特定的UI设计实践,即如何模仿知名新闻应用“今日头条”中的ToolBar组件。ToolBar在Android应用开发中扮演着重要角色,它是Android Material Design规范中定义的一...
【ToolBarDemo】是一个基于Material Design设计风格的Android应用示例,主要展示了如何在项目中集成并使用ToolBar。Material Design是谷歌推出的一种现代化的界面设计语言,它提供了丰富的交互效果和统一的设计规范...