2010-01-15 27 views
0

好的,所以我正在嘗試設置一個簡單的JSF應用程序。我使用的是NetBeans 6.8,Glassfishv3和Maven2。我做了像這樣一個JSP文件:由於某些原因,JSP文檔輸出XML而不是HTML

​​

問題是,如果我瀏覽到該頁面(http://myHost/myApp/faces/welcome.jspx),它會返回一個XML文檔,但與${Welcome.title}值填充:

<?xml version="1.0" encoding="UTF-8"?> 
<html><head><title>Gymix - Welcome</title></head><body>Welcome</body></html> 

在Internet Explorer中,這看起來像我會打開一個XML文檔。在谷歌瀏覽器中,標題將打印在歡迎文字旁邊,而不是標題中標籤上打印的頁面URL。

如果我將JSP文檔更改爲普通的JSP頁面(taglibs而不是xmlns等),它將起作用,並且返回一個正確的頁面。有什麼錯誤的想法?謝謝!

編輯:遺憾的是,沒有一個快速修復程序解決了這個問題,所以我會更多地考慮這一點。順便說一句,我的pom.xml中有jsf-api和jsf-impl依賴,版本都設置爲1.2_14

回答

2

除此之外,你需要設置正確的doctypecontent type,使瀏覽器知道如何處理的頁面做的,你也應該擺脫老式jspx格式,並使用xhtml格式的事實以獲得Java EE 6發佈的JSF 2.0和Facelets的最大優勢。

給定的代碼應改爲:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <title>#{welcome.title}</title> 
    </h:head> 
    <h:body> 
     Welcome 
    </h:body> 
</html> 

注意,文檔類型包括和JSF 2.0/Facelets的會自動拍攝有關的權利的內容類型與<h:head>組件的幫助照顧。還要注意缺少<f:view>標籤,這在Facelets中不再需要。

您可能還需要重新配置您的web應用程序,以充分利用JSF 2.0和Facelets的全部功能。要了解有關JSF 2.0和Facelets的更多信息,我強烈建議您閱讀Java EE 6 tutorial part II chapters 4-9

祝你好運。

更新:根據comment of bobince:我會添加一個重要的說明;確實XML聲明(第一行)會混淆某些webbrowsers的呈現模式(同樣參見上面的doctype鏈接背後的站點),但這當然是而不是這裏的一個問題。在生成頁面的HTML期間,Facelets 刪除 XML聲明。 XML聲明就在那裏,因爲Facelets需要首先使用基於XML的工具解析頁面。我們正在討論基於組件的MVC框架和基於XML的模板技術,而不是簡單的香草HTML頁面;)

+0

嗯NetBeans無法識別h:head和h:body。我可能使用舊版本的jsf-impl和jsf-api(1.2_14)? – Sevas 2010-01-16 00:36:06

+0

Glassfish v3已經發布了JSF 2.0。你不需要自己包含任何庫。只需遵循Java EE 6和Netbeans 6.8教程。 – BalusC 2010-01-16 00:56:01

2

我認爲你需要輸入一個有效的文檔類型。

這將去下面的XML聲明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
+0

嗯我試過這個,但NetBeans給我一個錯誤(無法打開文件或其他東西)看起來像一個編譯錯誤... – Sevas 2010-01-16 00:30:59

0

你必須告訴您發送的瀏覽器。我不確定如何在JSP內部完成它,所以你必須弄清楚自己,或者等到有人比我更懂事告訴你。

您必須發送Content-Type HTTP標頭,指明您的文件是text/html; charset=UTF-8

Content-Type: text/html, charset=UTF-8

+0

哦,正如達倫所說,設置文檔類型也不會傷害。但是,如果您繼續將其作爲XML發送,Internet Explorer在打開該頁面時仍然會失敗。 – zneak 2010-01-15 21:13:27

+0

您可以使用web.xml中的元素根據請求的擴展名(.jspx)設置內容類型 – 2010-01-15 21:25:39

+0

您還需要丟失'<?xml'聲明,如果輸出會跳出IE6-7的文檔類型嗅探器,把它放在怪癖模式。 '<?xml version =「1.0」encoding =「utf-8」?>'無論如何都不做任何事情,因爲這些是XML文檔的默認屬性。 – bobince 2010-01-15 22:07:06

相關問題