0

我正在尝试对我的 JSP 输出进行完整的 XHTML 过渡验证,但遇到了障碍。标题的顶部如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

它包含在如下语句中:

<jsp:include>
  <jsp:attribute name="page"><owportal:page name="/style/portal/header.jsp" /></jsp:attribute>
</jsp:include>

<owportal:page> 标记检查几个不同的路径,以便我们可以在需要时使用特定于项目的标头覆盖它。这样做的问题是 owportal taglib 需要在使用之前进行声明,在 XML 声明之前插入一个空行并导致验证警告。

我曾尝试使用 jsp:output生成 XML 声明,但运气不佳。谁能让我知道我是否在正确的轨道上?

更新:

目前我正在尝试这样的事情

<%@ taglib uri="/WEB-INF/yadda/yadda" prefix="yadda" %>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml" version="2.0">
  <jsp:output omit-xml-declaration="false" doctype-root-element="html"
              doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
              doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
</jsp:root>

<html>...

我在 <jsp:root> 行收到错误“无效的标准操作”。不是最有用的错误消息。听起来我可能以某种方式错误地使用了标签。我正在运行 Tomcat 6,所以 JSP 版本应该没有问题。谁能看到我做错了什么?<jsp:root> 是否意味着环绕 <html>?

4

1 回答 1

1

如果我对您的理解正确,那么您正在尝试将这个 jsp:include 包含在 JSP 的最顶部,但是在此过程中,您会导致 JSP 在 XML 前导码之前的顶部输出几位空格。

在这种情况下,我只是确保 JSP 没有空格:

<jsp:include><jsp:attribute name="page"><owportal:page name="/style/portal/header.jsp" /></jsp:attribute></jsp:include>[your content continues here, not on next line!]...

但我认为您在问一个不同的问题,即如何告诉 JSP 输出 XML 声明。为此,您想从这样的事情开始(假设您在这里使用的是最近的 JSP 规范,如 2.1)...

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml" version="2.1">
  <jsp:output
          omit-xml-declaration="false" doctype-root-element="html"
          doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
          doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
...

这是处理从 JSP(X) 文件输出 XML 的更正确的方法——更明确。

于 2009-06-02T18:26:06.090 回答