14

我正在开发一个 JSP,我需要在来自 Bean 的对象上调用方法。该页面的先前版本没有使用 JSTL,并且可以正常工作。我的新版本有这样的设置:

<jsp:useBean id="pageBean" scope="request" type="com.epicentric.page.website.PageBean" />
<c:set var="pageDividers" value="<%= pageBean.getPageDividers() %>" />
<c:set var="numColumns" value="${pageDividers.size()}" />

变量pageDividers是一个List对象。

我遇到了这个问题:当我询问pageDivider's 的大小时,会引发异常。我知道这是一个简单的 JTSL 错误——我做错了什么?

错误信息是:

未指定默认命名空间时,函数大小必须与前缀一起使用

如何正确访问或调用pageDividers对象的方法?

4

2 回答 2

27

在 JSTL 中使用点运算符进行属性访问时,${pageDividers.size}(不需要())导致调用名为getSize().
由于 java.util.List 提供了一个名为size()(而不是getSize())的方法,因此您将无法使用该代码访问列表长度。


为了访问列表大小,JSTL 提供了fn:length函数,使用如下

${fn:length(pageDividers)}

请注意,为了使用fn命名空间,您应该将其声明如下

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

此外,相同的函数可以用于任何集合类型,也可以用于字符串。

于 2008-10-22T21:08:58.260 回答
2

要使用 EL 访问 bean 的属性,您只需命名属性(而不是调用方法)。因此,假设您在 bean 中有一个名为 getSize() 的方法

${pageDividers.size}

注意没有()。

编辑:对不起...在原始帖子中出错。

于 2008-10-22T20:53:32.847 回答