admin 管理员组

文章数量: 1087652


2024年3月14日发(作者:truncate sql语句写法)

jmesa源码解读一[包结构]

Jmesa源码的包结构大致分为四个包:

Jmesa的核心包,所下面定义下最核心的接口CoreContext,CoreContext的作

有容后再述,下面有四个子包:

过滤器(按条件对纪录进行过滤)

排序,该包提供纪录按指定列进行排序的功能

e I18N资源文件实现,使用Java内置的ResourceBundle实现。较简单

ence Jmesa选项,使用Java内置Properties实现。也较简单

该包提供对纪录进行过滤的功能,limit的原意为限制,这里表现为过滤。

Jmesa提供接口让开发人员自定义存放Limit的地方。该接口就是位于该包 下面子包state

下的State接口,用来保存当前用户查询选项或参数的状态,这些参数可能包括过滤条件

(Filter),排序条件(Sort)以及分 页信息等。

视图,亦即展现。该包下定义了展现表格的接口及提供了两种实现,CSV及

HTML。展现的原理很简单,一个视图拥有一个被展现的组件(Component)和渲染器

(Renderer)。使用渲染器来渲染组件。那么自然而然,View包下面又看到两个子包:

ent 定义了表格需要的组件,即表格,行,列。

er 定义表格所需要的一系列渲染器,如行渲染,列渲染,单元格渲染

为在Web环境中使用Jmesa提供的一系列便利的类。

这就是Jmesa源码的分布。个人觉得结构很清晰明白,代码看起来也不费力。代码是最有说

服力的文档。有时候,看文档还比不上直接读源码。

jmesa源码解读二[limit包]

limit包下的东西,比较重要。

Limit接口包括id, RowSelect, FilterSet, SortSet和Export这五样东西。

public interface Limit extends Serializable {

public String getId();

public RowSelect getRowSelect();

public void setRowSelect(RowSelect rowSelect);

public FilterSet getFilterSet();

public void setFilterSet(FilterSet filterSet);

public SortSet getSortSet();

public void setSortSet(SortSet sortSet);

public boolean isExportable();

public Export getExport();

public void setExport(Export export);

}

RowSelect管理分页算法。传入page, maxRows,和totalRows,就能算出rowStart和rowEnd.

FilterSet是一个保存过滤条件的Collection, 它里边是一些property‐value组成的Filter。每个

Filter对应一个过滤条件。

SortSet是一个保存排序条件的Collection, 它里边是一些property‐value组成的Sort。每一个

Sort对应一个排序条件。与Filter实现基本完全一样。不同的是。在构造Sort 对象的时候除

了传property和value外,还要传一个position,表示这个排序处在什么位置。每加入一个Sort

到集合SortSet里 边,都会在内部调用()方法对加入的Sort进行排序

Export里边就一个private String type;属性, 表示当前的操作是不是要导出数据。然后是什

么type的(目前2.0.1版本只提供csv格式数据的导出)。

Limit, RowSelect,FilterSet,SortSet都对应一些十分简单的Impl类, 除RowSelectImpl有一个

分页算法,Impl类主要是setters, getters的实现。没有什么可看的。

这些凌散的元素需要一个Factory来把它们组装起来。接下来看LimitFactory和

LimitActionFactory.

LimitFactory需要你传递id(table_id)和WebContext(对request的封装)来构造,它提供三个

方法

createLimit(),

createRowSelect(maxRows,totalRows),

createLimitAndRowSelect(maxRows,totalRows);

LimitActionFactory是LimitFactory的助手类。LimitFactory把自己的构造函数参数传给

LimitActionFactory,然后自己需要什么东西就直接找LimitActionFactory要。

先看createLimit()方法:

public Limit createLimit() {

Limit limit = new LimitImpl(());

FilterSet filterSet = terSet();

terSet(filterSet);


本文标签: 提供 条件 过滤 接口 排序