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
- 浏览 2393
- 评论(0)
- 论坛回复 / 浏览 (0 / 1866)
- 查看更多
相关推荐
1. **Toolbar 设置**:可以设置工具栏,例如添加排序和过滤功能。 2. **CSS 效果设置**:通过 API 设置表格样式,比如宽度、高度等。 ```java 列名.setStyle("width:1px"); ``` 3. **禁用功能**:如果需要,可以...
在Android开发中,`Toolbar`已经取代了传统的`ActionBar`,成为新的导航和展示应用元数据的组件。它提供了一种更加灵活的方式来定制顶部栏,从而实现与Material Design设计规范相一致的用户界面。本教程将详细介绍...
在Android开发中,`ToolBar`是App界面设计中常用的一个组件,它作为Activity或Fragment的顶部栏,可以提供导航、菜单和其他操作。本教程将详细讲解如何在`ToolBar`中居中添加自定义控件,以提升应用界面的美观度和...
在VB6.0(Visual Basic 6.0)中,`Toolbar`是一个非常重要的控件,它用于创建用户界面中的工具栏。工具栏通常包含一系列的按钮,这些按钮代表了程序中的常用功能,使得用户可以快速访问和执行操作,极大地提高了软件...
本教程将详细讲解如何在Android项目中实现`Toolbar`以及与之相关的弹出框功能。 一、`Toolbar`的基本使用 1. 添加依赖:首先,在`build.gradle`文件中添加对Design Support Library的支持。通常在dependencies块下...
在Android应用开发中,ToolBar是Android Support Library提供的一种可定制化的顶部导航组件,它替代了传统的ActionBar,使得设计更加灵活且符合Material Design的设计规范。本文将深入探讨如何使用ToolBar以及如何...
在Android开发中,Toolbar作为Action Bar的替代品,被广泛应用于各类应用的界面设计中,提供了自定义性和灵活性。这个"toolbar实例程序"包含了两种不同的动态创建Toolbar的方法以及如何实现带有提示功能的Toolbar,...
### Activity之AppCompatActivity与Toolbar的结合 随着Android开发框架的不断演进,为了更好地支持不同版本的Android系统以及实现统一的用户体验,Google不断推出新的API和技术。从API 22开始,Google不再推荐使用`...
Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比, Toolbar 明显要灵活...
在Android应用开发中,`ToolBar`是Android支持库提供的一种可自定义的顶部导航组件,它取代了早期版本中的`ActionBar`,提供了更多的定制性和灵活性。`ToolBar`的设计旨在符合Material Design规范,使得应用程序看...
在Android应用开发中,Toolbar是Android 5.0(Lollipop)引入的一个组件,它作为ActionBar的替代品,提供了更多的自定义性和灵活性。本教程将详细介绍Toolbar的基本使用,并结合ListView探讨如何实现滑动变色的效果...
ToolBar是Android开发中常见的一种组件,它在API Level 21(Android Lollipop)被引入,作为ActionBar的替代品,提供了更加灵活的定制能力和更好的视觉效果。本项目"ToolBar的Demo实战"旨在通过一个简单的实例,帮助...
在Android开发中,`Toolbar`是一个非常重要的组件,它作为Action Bar的替代品引入,提供了更灵活的定制和布局选项。本示例将深入探讨`Toolbar`的使用方法及其相关知识点,帮助开发者更好地理解和应用这一功能强大的...
在Windows编程领域,`ToolBar`和`ToolbarTray`是两个关键组件,它们在创建具有丰富用户界面的应用程序时起到重要作用。`ToolBar`通常用于显示一排按钮,这些按钮代表了应用程序的不同功能或操作,而`ToolbarTray`则...
在IT行业中,`ToolBar`是一种常见的用户界面组件,主要用于在应用程序顶部展示一组工具或操作按钮,使得用户可以方便地访问和执行常用功能。本话题主要探讨如何在`ToolBar`上添加滚动条和下拉框,并实现它们之间的...
在VB(Visual Basic)编程环境中,菜单栏和ToolBar是用户界面设计的重要组成部分,它们提供了直观、易用的交互方式,使用户能轻松访问程序的各种功能。本教程将深入讲解VB基础菜单栏的创建与使用,以及如何利用微软...
在Android开发中,`ToolBar`是App界面设计中不可或缺的一部分,它通常位于Activity或Fragment的顶部,用作应用的导航栏。`ToolBar`是自Android 5.0(API级别21)开始引入的,作为`ActionBar`的替代品,提供了更灵活...
在Android应用开发中,我们经常需要根据用户交互来动态调整界面元素的可见性,例如当用户滚动列表时,隐藏或显示顶部的ToolBar以及悬浮动作按钮(Floating Action Button, FAB)。这种效果能提供更好的用户体验,...
在C#编程环境中,ToolBar控件是一个非常常用且实用的组件,它允许开发者在应用程序界面中创建工具栏,展示各种按钮、菜单项或其他操作控件,以方便用户快速执行常见任务。本示例程序“C#实现toolbar”旨在教你如何在...
本篇文章将深入探讨如何在MFC应用中实现“bitmap类型的toolbar”以及其可移动特性。 首先,我们需要理解Bitmap Toolbar的概念。Bitmap Toolbar是一种特殊的toolbar,它的每个按钮不是由系统提供的标准图标,而是...