JSTL,Bean和方法调用

Zac*_*man 14 java jsp vignette jstl exception

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

变量pageDividers是一个List对象.

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

错误消息是:

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

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

aba*_*gat 27

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


为了访问列表大小,JSTL提供了fn:length函数,就像使用它一样

${fn:length(pageDividers)}
Run Code Online (Sandbox Code Playgroud)

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

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Run Code Online (Sandbox Code Playgroud)

此外,相同的功能可以与任何集合类型一起使用,也可以与字符串一起使用.

  • 这很糟糕.为什么他们不会让你使用类/实例本身调用方法!?你在JEE平台上遇到各种各样的虫洞...... ffs! (5认同)