2

我正在制作一个与 tomcat 7 (7.0.27) 兼容的应用程序(为 tomcat 5.5 开发)。我在使用 jstl 时遇到问题,只是在我指定时不输出标签:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

在我的 WEB-INF/web.xml 文件中(之前使用的是 2.4 版本)。

一个示例 .jsp 文件:

%@page
   language="java"
   pageEncoding="utf-8"
   contentType="text/html;charset=utf-8"
   buffer="none"
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="uri:path-to-layout/layout" prefix="layout" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:bundle basename="com.path.to.resources.Labels">

...

<td><input
name="j_username"
id="j_username" 
maxlength="30" 
accesskey="2" 
type="text"
style="width: 150px;"
value="<c:out value="${pageContext.request.remoteUser}" default="" />" /></td>

我收到的不是预期的输出,而是:

${pageContext.request.remoteUser}

作为文本字段中的值。

我使用 JSTL 1.2.1、Tomcat 7.0.27、JSP 2.2。代码编译,当我将 web.xml 中的 web-app 版本从 3.0 更改为 2.4 时,它可以在不直接输出这些值的情况下工作(尽管还有其他问题迫使我使用 3.0 版本)。有什么想法可能是导致此问题的原因吗?

4

2 回答 2

4

您提到您使用的是 JSTL 1.2.1,我认为它是从 Glassfish 服务器劫持的以下内容:

  • javax.servlet.jsp.jstl-1.2.1.jar
  • javax.servlet.jsp.jstl-api-1.2.1.jar

但是,根据评论,您似乎仍然在以下 117 个文件中拥有旧的 JSTL 1.0/1.1 库/WEB-INF/lib

  • jstl.jar
  • standard.jar

那只会有冲突。删除它们。

于 2012-05-30T02:57:01.623 回答
0

您需要对 使用单引号c:out,否则您将结束标记的value属性。input改为这样做:

<td><input name="j_username" id="j_username" maxlength="30" accesskey="2"
     type="text" style="width: 150px;" 
     value="<c:out value='${pageContext.request.remoteUser}' default='' />" /></td>
于 2012-05-25T15:54:29.150 回答