我正在尝试重新部署落入我手中的项目。这是一个maven项目,它使用的依赖项中有javax.servlet-api:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>2.5</version>
</dependency>
对此,我在jsp-s中遇到错误,包括以下内容。
对于HttpServletRequest类型,未定义getIsUserInRole()方法。
和
此行找到多个注释: - 未定义的属性名称 (ID)。 - 未知标签(画布)。 - 未定义的属性名称 (方式)。
为此,我将servlet版本更改为3.0.1:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
但是,我仍然有同样的错误。构建路径上的jstl版本(相关)是1.2。
如何解决这个问题?
为什么我要显式定义任何类型的servlet-api,servlet容器不具备它吗? 如果是这样,如何告诉JBoss使用servlet版本3.0.1?
我在Eclipse Neon上运行JBoss 7.1。我试着在Eclipse Mars上做同样的事情。
TIA。
// -------------------------------
编辑:
getIsUserInRole()是Eclipse问题报告中出现的名称。这是一个快照:
方法名称在代码中拼写正确:
<c:if test="${not empty pageContext.request.userPrincipal}">
<c:if test="${pageContext.request.isUserInRole('ROLE_ADMIN')}">
<button class="custombutton" id="admin" style="font-size: 150%; height:80px; width: 100%">Administration [Admin. Profile]</button>
</c:if>
</c:if>
此外,Eclipse正在报告所有画布项目的警告 - 标签,属性名称等无法识别它们:
// -----------------
EDIT2:
这个项目有Spring 3.2.8。它能以某种方式拦截servlet定义吗?但是,pom.xml依赖关系层次结构不显示它。
此外,我没有更改项目中的任何Spring依赖项,它们与现在部署和运行的相同。
这看起来像构建问题,但是我看不到它。以前的版本部署在IntelliJ上。
答案 0 :(得分:0)
难怪它会产生编译错误:该方法拼写错误:它是isUserInRole
,而不是getIsUserInRole
。结果是,在标签中,必须始终省略动词:
${pageContext.request.userInRole('ROLE_ADMIN')}
为什么我要明确定义任何类型的servlet-api,servlet容器不具备它吗?如果是这样,如何告诉JBoss使用servlet版本3.0.1?
在编译中,Web容器尚不可用,因此您实际上需要将类路径放在JEE运行时(servlet-api.jar
)上。你做得很好。
如果是这样,如何告诉JBoss使用servlet版本3.0.1?
AFAIK没办法:您选择要使用的servlet容器(和版本),它与特定的运行时捆绑在一起。因此,编译时必须完成该运行时。
关于canvas
标记的警告:确保您使用 HTML5 进行编码:将此声明放在JSP的开头:
<%@ page language="java"
import="..."
%><!DOCTYPE html>
<html>
...
</html>