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

时间:2013-09-23 14:04:27

标签: jsp tomcat jstl el

我收到此错误

  

/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”

2 个答案:

答案 0 :(得分:12)

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

只要调用带参数的方法(那些())是EL 2.2(及更高版本)的特性,它伴随着Servlet 3.0兼容容器(因此Tomcat 7),您的代码就可以在本地运行。< / p>

只要在Servlet 2.5容器(即Tomcat 6)上运行此代码,就会出现上述错误。

两个servlet容器都支持“类似属性”访问(没有())。

答案 1 :(得分:5)

试试这个:

<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()。如果该方法不存在,你将获得异常。)