JFinal, Page<Model>在jsp中使用jstl解析出错的问题

整天散步的鱼 发布于 2012/08/01 10:15
阅读 2K+
收藏 2

使用JFinal过程中

setAttr("bookList", Book.dao.find("select * from library order by id asc"));
这样在jsp中使用jstl对list进行循环时属性,比如${book.name} 没有问题。

当使用分页时
setAttr("pageView", Book.dao.paginate(page, 50, "select * ", "from library order by id asc")); 在jsp中使用jstl对pageView.list进行循环解析时,会报找不到XXX属性的错误。

请问如何解决?

以下是问题补充:

@xianglc5474:我使用的是1.1.1版,貌似还是有问题啊 我测试了一下它取值的时候貌似是当做一个bean来取的而不是map对象 我想问一下是我还有什么东西没写对吗? (2012/08/27 11:59)
加载中
0
JFinal
JFinal

本质上来说,这个问题是由于jstl 的数据读取能力太弱了,本问答中的pageView对象已经保存在了 HttpServletRequest 对象之中了,只不过上面的 jstl 没取到而已。JFinal针对于 jstl 能力太弱的问题,已经进行了一些支持,例如 List<Model> 的支持。正在开发中的 JFinal 1.1.1 版本已经支持楼主本问答中的需求了,所以楼主可以去 JFinal 极速开发群(222478625)找我要最新版 JFinal,支持以上功能只需要改造一下 JspRender,添加代码如下:

private Object handlePage(Page page) {
  Map<String, Object> result = new HashMap<String, Object>();
  result.put("list", page.getList());
  result.put("pageNumber", page.getPageNumber());
  result.put("pageSize", page.getPageSize());
  result.put("totalPage", page.getTotalPage());
  result.put("totalRow", page.getTotalRow());
  return result;
}


0
鱼中鱼
鱼中鱼
  library 有属性XXX吗?
没有的话,遍历是有问题了。
JFinal
JFinal
回复 @鱼中鱼 : 贴子呢?
鱼中鱼
鱼中鱼
粘个代码看下。
整天散步的鱼
整天散步的鱼
有这一个属性。
0
整天散步的鱼
整天散步的鱼
Page<Book> pageView = Book.dao.paginate(page, 50, "select * ", "from library order by id asc");

setAttr("pageView", pageView);

JSP部分

 

<c:forEach items="${pageView.list}" var="book" varStatus="xuh">
<tr>
<td><c:choose><c:when test="${empty book.BOOKNO}">&nbsp;&nbsp;</c:when><c:otherwise>${book.BOOKNO}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.CATEGORY}">&nbsp;&nbsp;</c:when><c:otherwise>${book.CATEGORY}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.BOOKNAME}">&nbsp;&nbsp;</c:when><c:otherwise>${book.BOOKNAME}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.PUBLISHER}">&nbsp;&nbsp;</c:when><c:otherwise>${book.PUBLISHER}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.PRICE}">&nbsp;&nbsp;</c:when><c:otherwise>¥${book.PRICE}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.AUTHOR}">&nbsp;&nbsp;</c:when><c:otherwise>${book.AUTHOR}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.STATUS}">&nbsp;&nbsp;</c:when><c:otherwise>${book.STATUS}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.BORROWER}">&nbsp;&nbsp;</c:when><c:otherwise>${book.BORROWER}</c:otherwise></c:choose></td>
<td><c:choose><c:when test="${empty book.CANBORROWDATE}">&nbsp;&nbsp;</c:when><c:otherwise>${book.CANBORROWDATE}</c:otherwise></c:choose></td>
</tr>

0
整天散步的鱼
整天散步的鱼

引用来自“JFinal”的答案

本质上来说,这个问题是由于jstl 的数据读取能力太弱了,本问答中的pageView对象已经保存在了 HttpServletRequest 对象之中了,只不过上面的 jstl 没取到而已。JFinal针对于 jstl 能力太弱的问题,已经进行了一些支持,例如 List<Model> 的支持。正在开发中的 JFinal 1.1.1 版本已经支持楼主本问答中的需求了,所以楼主可以去 JFinal 极速开发群(222478625)找我要最新版 JFinal,支持以上功能只需要改造一下 JspRender,添加代码如下:

private Object handlePage(Page page) {
  Map<String, Object> result = new HashMap<String, Object>();
  result.put("list", page.getList());
  result.put("pageNumber", page.getPageNumber());
  result.put("pageSize", page.getPageSize());
  result.put("totalPage", page.getTotalPage());
  result.put("totalRow", page.getTotalRow());
  return result;
}


感谢詹兄大力支持。

JFinal
JFinal
也谢谢你的支持 :)
0
鱼中鱼
鱼中鱼
用了renderJsp(),在页面中遍历集合时,取不到属性值
setAttr( "list" , page.getList());
这样却是可以的。
0
JFinal
JFinal

引用来自“鱼中鱼”的答案

用了renderJsp(),在页面中遍历集合时,取不到属性值
setAttr( "list" , page.getList());
这样却是可以的。
新版本已然支持了啊,你版本没更新? 建议你使用 freemarker
返回顶部
顶部