Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1199138
  • 博文数量: 89
  • 博客积分: 10546
  • 博客等级: 上将
  • 技术积分: 1510
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-16 01:24
文章分类

全部博文(89)

文章存档

2012年(7)

2011年(4)

2010年(5)

2009年(52)

2008年(21)

分类: Java

2009-03-23 18:36:07

JMesa 提供了更多的特性,如结果集过滤等。它也提供了类似的 Display Tag 类似的 下载,解压将 jmesa.jar 复制到项目的 lib 中。 另外 JMesa 依赖一些第三方的库。

  • commons-lang
  • commons-collections
  • commons-beanutils
  • slf4j

前面三个都可以从 下载。slf4j可以从 下载。

修改ListUserActionBean

public class ListUserActionBean extends BaseActionBean {

private List users;
private String html;
private String id = "users_table";

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getHtml() {
return html;
}

public void setHtml(String html) {
this.html = html;
}

public List getUsers() {
return users;
}

public void setUsers(List users) {
this.users = users;
}

@DefaultHandler
public Resolution listUsers() {

TableFacade tableFacade = TableFacadeFactory.createTableFacade(id, getContext().getRequest());
tableFacade.setColumnProperties("id", "firstname", "lastname", "action");

tableFacade.setMaxRows(5);
tableFacade.setMaxRowsIncrements(5, 10);
tableFacade.autoFilterAndSort(true);
tableFacade.setStateAttr("state");

Limit limit = tableFacade.getLimit();
if (!limit.isComplete()) {
int totalRows = Users.getUserList().size();
tableFacade.setTotalRows(totalRows);
}
int rowEnd = limit.getRowSelect().getRowEnd();
int rowStart = limit.getRowSelect().getRowStart();
users = Users.subList(rowStart, rowEnd - rowStart);

final SortSet sortSet = limit.getSortSet();
if (sortSet != null) {
Sort firstnameSort = sortSet.getSort("firstname");
if (firstnameSort != null && firstnameSort.getOrder() != Order.NONE) {
Collections.sort(users, new FirstnameComparator());
if (firstnameSort.getOrder() == Order.DESC) {
Collections.reverse(users);
}
}

Sort lastnameSort = sortSet.getSort("lastname");
if (lastnameSort != null && lastnameSort.getOrder() != Order.NONE) {
Collections.sort(users, new LastnameComparator());
if (lastnameSort.getOrder() == Order.DESC) {
Collections.reverse(users);
}
}
}



// users = Users.subList(rowStart, rowEnd - rowStart);
tableFacade.setItems(users);

HtmlTable table = (HtmlTable) tableFacade.getTable();
//table.setCaption("Presidents");
table.getTableRenderer().setWidth("600px");

HtmlRow row = table.getRow();

HtmlColumn userid = row.getColumn("id");
userid.setTitle("User ID");
userid.setSortable(false);

HtmlColumn firstName = row.getColumn("firstname");
firstName.setTitle("First Name");


HtmlColumn lastName = row.getColumn("lastname");
lastName.setTitle("Last Name");


HtmlColumn action = row.getColumn("action");
action.setTitle("Action");
action.setFilterable(false);
action.setSortable(false);

action.getCellRenderer().setCellEditor(new CellEditor() {

public Object getValue(Object item, String property, int rowcount) {
Object value = ItemUtils.getItemValue(item, "id");
HtmlBuilder html = new HtmlBuilder();
html.a().href().quote().append(getContext().getServletContext().getContextPath()).append("/EditUser.action?id=").append(value).quote().close();
html.append("Edit");
html.aEnd();
html.append(" ");
html.a().href().quote().append(getContext().getServletContext().getContextPath()).append("/DeleteUser.action?id=").append(value).quote().close();
html.append("Delete");
html.aEnd();
return html.toString();
}
});

html = tableFacade.render();
return new ForwardResolution("/userList.jsp");
}

class FirstnameComparator implements Comparator {

public int compare(User o1, User o2) {
return o1.getFirstname().compareTo(o2.getFirstname());
}
}

class LastnameComparator implements Comparator {

public int compare(User o1, User o2) {
return o1.getLastname().compareTo(o2.getLastname());
}
}
}

修改 userList.jsp 页面,将 body 中间内容替换成如下。

			...

${actionBean.html}


...

JMesa 依赖 JQuery,对于熟悉的 JQuery 的用户来说,这无疑是个好消息。

JMesa 的例子程序复制 cssjsimages 目录到项目的 web 目录中。

现在你可以运行程序了。

[注意]注意
这里我们没有使用 JMesa 的taglib,你可以尝试使用 taglib 来替代这种编程的方式。
阅读(4189) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-04-16 16:40:01

相对display tag 来说,jmesa 算是比较中立的,不依赖什么特定的web 框架技术。不管使用什么web 框架,它面临的问题的几乎是一样的。 jmesa 并没有要求你的 stripes actionbean提供maxrows属性,这个错误,只是你对stripes 的理解的不够。但是的jmesa 的 table 是肯定要指定maxrows 才能达到分页的效果。 参考时,这个例子只能当初步的学习,深入的详细参考应该以jmesa 官方文档为准。

chinaunix网友2009-04-16 15:46:09

上面的问题已经解决了 ,但还有个问题就是jmesa在列表的每个字段上方有个过滤的输入框,输入英文或数字过滤成功,输入中文就不认了,jmesa自带的例子没有问题,但结合stripes后就出现这个问题了,看后台输入的log, Could not bind property with name [maxRows] to bean of type: BookTypeInfoActionBean : Bean class bookmanager.sysmanager.BookTypeInfoActionBean does not contain a property called 'maxRows'. As a result the following expression could not be evaluated: maxRows 这个应该是stripes输出的,每个actionbean必须定义maxrows等字段吗?能否给个提示,应该修改什么地方,谢谢

chinaunix网友2009-04-16 00:02:41

请从google code 的svn 上checkout 源代码,自行分析。

chinaunix网友2009-04-15 11:57:13

按照上面例子做实验,数据能够出现,但翻页时报javascript错误:jquery未定义,看源代码这里出现的null应该是什么?该如何解决呢?谢谢