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);
版权声明:本文标题:jmesa详解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710389973a570922.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论