JSTL、Bean 和方法调用

2022-09-03 18:23:49

我正在研究一个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

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

错误消息是:

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

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


答案 1

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


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

${fn:length(pageDividers)}

请注意,为了使用 fn 命名空间,应按如下方式声明它

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

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


答案 2

要使用 EL 访问 Bean 的属性,只需命名该属性(不调用该方法)。假设你在bean中有一个名为getSize()的方法,然后

${pageDividers.size}

注意否 ()。

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