2009-05-29 5 views
0

Ich versuche eine vollständige XHTML-Transitional-Validierung meiner JSP-Ausgabe zu erreichen, aber ich habe einen Haken gefunden. Die Oberseite des Kopf sieht wie folgt aus:Whitespace vor XML-Deklaration von JSP

<?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"> 

Es ist mit einer Erklärung enthalten, die wie folgt aussieht:

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

Die < owportal: Seite > Tag überprüft ein paar verschiedene Wege, damit wir überschreiben Sie es bei Bedarf mit einem projektspezifischen Header. Das Problem dabei ist, dass die OWPORTAL-Taglib deklariert werden muss, bevor sie verwendet werden kann, indem vor der XML-Deklaration eine Leerzeile eingefügt wird und eine Validierungswarnung ausgegeben wird.

Ich habe versucht, mit jsp: generate an XML declaration ohne viel Glück ausgegeben. Kann mich jemand wissen lassen, ob ich hier richtig liege?

Update:

Zur Zeit dieses so etwas wie ich versuche

<%@ 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>... 

Und ich erhalte eine Fehlermeldung "Ungültige Standard-Aktion" am < jsp: root > Linie. Nicht die hilfreichste Fehlermeldung. Klingt, als ob ich das Tag irgendwie falsch verwende. Ich lasse Tomcat 6 laufen, also sollte es kein Problem mit der JSP-Version sein. Kann jemand sehen, was ich falsch mache? Ist < jsp: root > gemeint, um zu wickeln <html>?

+1

Ja, ich sehe vielleicht zwei Probleme: XML-Dokumente können nur ein Wurzelelement haben; hier hast du zwei. geht in in der Tat. Außerdem sieht es so aus, als ob Sie die alte 1.x-Syntax verwenden, um die Taglib zu deklarieren. Ich denke, es gibt einige Äquivalente für das, was Sie wollen oder müssen. Und das geht auch drinnen. –

Antwort

1

Wenn ich Sie richtig verstehe, dann versuchen Sie, dieses jsp: include ganz oben in der JSP einzuschließen, aber dabei veranlassen Sie die JSP, oben ein paar Bits Whitespace auszugeben die XML-Präambel.

In Fällen wie diesem, habe ich Zuflucht nur zu machen, dass die JSP dort keine Leerzeichen hat:

<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!]... 

Aber ich denke, Sie sind der Art eine andere Frage zu stellen, das ist wie eine JSP zu sagen, um eine XML-Deklaration auszugeben. Um das zu tun, du so mit etwas beginnen möchten (vorausgesetzt, hier sind Sie eine aktuelle JSP-Spezifikation wie 2.1 verwenden) ...

<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"/> 
... 

Dies ist mehr richtig zur Ausgabe von XML aus einer JSP zu handhaben (X) Datei - expliziter.

+0

Hey danke für deine Antwort. Ja, ich dachte mehr über die zweite Lösung nach, die du aufgelistet hast. Ich habe versucht, jsp: root zu verwenden, hatte aber Probleme. Ich habe den ursprünglichen Beitrag mit weiteren Informationen aktualisiert. – Kenny