8

我收到此错误

/WEB-INF/jsp/account/index.jsp(6,0) 函数 getMessageData 在未指定默认命名空间时必须使用前缀

<c:set var="messageData" scope="session" value="${usermap.getMessageData()}"/>
<c:set var="scheduleData" scope="session" value="${usermap.getScheduleData()}"/>
<c:set var="meetingData" scope="session" value="${usermap.getMeetingData()}"/>

请注意,我可以在本地 Tomcat 上运行相同的项目而不会出现任何错误。

服务器上的 Tomcat 版本是“Tomcat 6.0”

4

2 回答 2

13

您的代码的问题是本地运行的代码是在 Tomcat 7 上运行的,而在服务器上运行的代码是在 Tomcat 6 上运行的。

一旦调用带有参数的方法(那些())是 EL 2.2(和更高版本)的特性,并且伴随着 Servlet 3.0 兼容的容器(因此是 Tomcat 7),您的代码在本地运行良好。

只要此代码在 Servlet 2.5 容器(因此是 Tomcat 6)上运行,您就会收到上述错误。

()尽管如此,两个 servlet 容器都支持“类属性”访问(没有)。

于 2013-09-23T15:21:40.243 回答
6

尝试这个:

<c:set var="messageData" scope="session" value="${usermap.messageData}"/>
<c:set var="scheduleData" scope="session" value="${usermap.scheduleData}"/>
<c:set var="meetingData" scope="session" value="${usermap.meetingData}"/>

原因是,EL 删除了“get”,并使您的 getter 方法中的第一个字母小写。通常有一个字段与修改后的 getter 名称匹配,但这不是必需的。

(实际上,反之亦然——当您执行 usermap.messageData 时,EL 会自动将其转换为 usermap.getMessageData()。如果该方法不存在,您将收到异常。)

于 2013-09-23T14:07:43.420 回答