@sarfuan



  • http://www.myjavaserver.com/~firbach/carrier/index.jsp
    Ist das jetzt mit dem MIME-Type so, wie du damals gemeint hast, dass es sein soll? Ich hab's nicht mehr genau im Kopf und die Suche dieses Forums ist ... nicht vorhanden. Der Firefox zeigt in dem einen Feld außerdem immer text/html an, aber das ist angeblich ein Bug. Vielleicht kannst du kurz checken, ob der Opera jetzt nicht mehr meckert...
    Außerdem nervt irgendwie, dass der W3C-Validator scheinbar keinen Accept-String sendet. Naja, wenigstens war es nicht viel Arbeit. 🙂



  • Hm, irgendwas ist da wohl schiefgelaufen 🙂
    Opera 8.51: text/html
    Opera 9 Preview 2: text/html
    Firefox 1.5.0.1: text/html
    so ganz funktioniert es noch nicht 😉

    Aber was ich gesehen habe, du hast im Quellcode <meta http-equiv="content-type" content="application/xml; charset=UTF-8" /> stehen. Das ist ja schon mal ein Anfang. Allerdings "überschreibt" der HTTP-Header jegliche Angaben im Quellcode. Und dein Server sendet im HTTP-Header eben nach wie vor den MIME-Type "text/html". Du musst serverseitig den Header anpassen!
    Und der bessere MIME-Type wäre übrigens application/xhtml+xml - schließlich handelt es sich ja um XHTML (also XML mit einer definierten Semantik ;)) und nicht um beliebiges XML.

    Nochmal wie ich es in Perl mache:

    if(index($self->{cgi}->http('HTTP_ACCEPT'), 'application/xhtml+xml') > -1) {
    	$header{-type} = 'application/xhtml+xml';
    }
    

    "$self->{cgi}->http('HTTP_ACCEPT')" liefert den Accept-String.
    "index" sucht nach dem ersten Vorkommen eines Substrings.



  • Ich mach das aber im HTTP-Header auch. 😞

    <%
    	final String accept = request.getHeader("Accept");
    	final String mimeType =	accept != null   &&   accept.contains("application/xml")  ?
    							"application/xml; charset=UTF-8" :
    							"text/html; charset=UTF-8";
    %>
    <%@ page contentType="<%= mimeType %>" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <html>
    	<head>
    		<meta http-equiv="content-type" content="<%= mimeType %>" />
    		<link rel="stylesheet" type="text/css" href="/~firbach/style.css" />
    		<title><%= request.getAttribute("title") %></title>
    	</head>
    

    Diese Seite wird von jedem Servlet als allererstes (nicht-textuell) included. Das, was im Quelltext steht, sollte also auch im HTTP-Header genauso gesetzt sein. Verdammt, ich fürchte, ich muss auf jeder JSP-Seite diese Unterscheidung textuell reinincluden, weil die aktuelle Einstellung vom includendem Servlet nicht auf die vom includeten übernommen wird. Wie scheiße. 👎

    @all: Wisst ihr ne sauberere Lösung?



  • Und wie schaust du das im Opera und im IE an? Ich check's bei beiden nicht. 😉



  • Opera: Panel mit Namen "Info"

    MfG SideWinder



  • SideWinder schrieb:

    Opera: Panel mit Namen "Info"

    MfG SideWinder

    Aaaaaaaaaaaaaaaaaaah. Thx



  • Also mit textuellem includen krieg ich es hin:

    <%@ include file="chooseContentType.jsp" %>
    
    <%
    final String contentType;
    {
    	final String accept = request.getHeader("Accept");
    	contentType =	accept != null   &&   accept.contains("application/xhtml+xml")  ?
    					"application/xhtml+xml; charset=UTF-8" :
    					"text/html; charset=UTF-8";
    	response.setContentType(contentType);
    }
    %>
    

    Ist aber nicht elegant. Für schönere Lösungsvorschläge wäre ich dankbar.

    Ich bin mir jetzt ziemlich sicher, dass alles korrekt gesetzt ist, ich habe es bis jetzt aber nur auf einer Seite gemacht, denn sie wird nicht richtig angezeigt (bis auf beim IE, der kriegt text/html):
    http://www.myjavaserver.com/~firbach/test.jsp

    Wo liegt das Problem?



  • Puh, also du machst Sachen 😃

    Entferne im CSS das "body { overflow: auto; }" und verpass der Seite mal ihren Namespace, siehe Punkt 3:
    http://www.w3.org/TR/xhtml11/conformance.html#strict

    Dann klappt's auch im XHTML-Modus von Opera und Firefox (mit text/html vorher wurde es ja als HTML gerendert) 🙂



  • sarfuan schrieb:

    Puh, also du machst Sachen 😃

    Entferne im CSS das "body { overflow: auto; }" und verpass der Seite mal ihren Namespace, siehe Punkt 3:
    http://www.w3.org/TR/xhtml11/conformance.html#strict

    Dann klappt's auch im XHTML-Modus von Opera und Firefox (mit text/html vorher wurde es ja als HTML gerendert) 🙂

    Ok, danke. Jetzt klappt alles wunderbar. Die <?xml Definition habe ich gegen die Empfehlung nicht drin gelassen, weil es dort mit dem FF wieder nicht geht. Aber jetzt ist das auf jeden Fall alles mal einigermaßen sauber. 🙂


Anmelden zum Antworten