【问题标题】:Trouble determining list size in jsp在 jsp 中确定列表大小时遇到​​问题
【发布时间】:2012-07-31 15:23:31
【问题描述】:

我正在尝试确定视图中集合的大小。我不想像在下面的代码中那样使用.size() 传递大小。

@RequestMapping(value = "/search/searchAndReplace")
public ModelAndView searchAndReplace(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView model = new ModelAndView("content/search/searchAndReplace");

    List<Content> searchResults = (List<Content>) request.getSession().getAttribute("searchResults");
    model.addObject("searchResults", searchResults);
    model.addObject("searchResultsCount", searchResults.size());

    return model;
}

在我看来,当我执行 ${searchResultsCount} 时一切正常,当我执行 ${searchResults.size()} 时,我收到错误 Class javax.el.BeanELResolver can not access a member of class java.util.ArrayList$SubList with modifiers "public"

我不明白为什么会窒息。有人可以提供一些见解吗?

【问题讨论】:

    标签: java list jsp view


    【解决方案1】:

    在您的示例中,EL 解析器在对象上寻找 size 属性,但在对象上没有方法 getSize()。而是使用 EL 表达式 fn:length(searchResults)。您需要为此定义 fn 命名空间:

        <%@ taglib uri="http://java.sun.com/jsp/jstl/functions"
    prefix="fn" %>
    

    【讨论】:

    • 为什么没有getSize() 可用?控制器和视图之间有什么变化使其失去该功能?
    • 在控制器中,它也不可用。但是有一个方法size(),但是对于 EL 解析器不会这样做。
    【解决方案2】:

    我很确定你需要先将它转换成它的对象类型。

    <%
    List<Content> searchResults = (List<Content>)request.getAttribute("searchResults");
    %>
    

    你应该可以使用 ${searchResults.size()}

    【讨论】:

    • 您确定这会对 EL 表达式产生任何影响吗?您正在使用 scriptlet 来引用正确的类型;但仍然没有 getSize() 方法,正如 EL 解析器所期望的那样。请参阅this article 了解 JSTL 如何使用访问器方法。
    猜你喜欢
    • 2013-06-29
    • 2018-09-03
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多