JSTL,Bean和方法调用

时间:2008-10-22 20:50:30

标签: java exception jsp jstl vignette

我正在开发一个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()}" />

变量pageDividersList对象。

我遇到了这个问题:当我要求pageDivider的大小时,会抛出异常。我知道这是一个简单的JTSL错误 - 我做错了什么?

错误消息是:

  

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

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

2 个答案:

答案 0 :(得分: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" %>

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

答案 1 :(得分:2)

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

${pageDividers.size}

注意没有()。

编辑:抱歉......在原帖中发了错误。