2015-07-22 53 views
2

是否可以告訴Mojarra 2.2在生成的html頁面中呈現哪個DocType?如何在JSF 2.2中指定目標DOCTYPE?

它似乎總是呈現以下HTML5文檔類型:

<!DOCTYPE html> 

在我們使用下面的DOCTYPE聲明我們的facelet模板,我們要保持它在生成的HTML:

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

模板:

<?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:ui="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html"> 

<h:body> 
    <ui:insert name="content">Will be replaced</ui:insert> 
</h:body> 
</html> 

內容:

<?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"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:h="http://java.sun.com/jsf/html" 
       template="/templates/standalone.xhtml"> 

    <ui:define name="content"> 
     <h:panelGroup> 
     Foo 
     </h:panelGroup> 
    </ui:define> 
</ui:composition> 

結果:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"><body> 
     Foo 
     </body> 
</html> 

我嘗試了用鑽嘴魚科2.2.7和2.2.12中使用GlassFish 4.1。

+0

這不是默認行爲。因此,如果您告訴確切的Mojarra版本,在問題中包含單個文件MVCE(因爲您說有「模板」而存在相當多的模糊性),和/或同時嘗試當前最新版本( 2.2.12)。 – BalusC

+0

我添加了一個例子,並用Mojarra 2.2.12與相同的結果進行了嘗試。 – anotherUser

+1

我轉載了它。這確實不是所謂的行爲。 – BalusC

回答

0

JIRA issue for this 看到這個鏈接:https://java.net/jira/browse/JAVASERVERFACES-2820 它已被關閉,因爲這是預期的行爲。 「

」複合頁面是您實際使用模板的地方,所以它是您指定文檔類型的最外層文件,因此它定義了將被呈現的文檔類型。

只要指定的DOCTYPE在模板和無處

+0

我在模板和複合視圖中使用相同的DocType聲明。從複合視圖中刪除DocType聲明時,結果仍爲'<!DOCTYPE html>'。 – anotherUser

+0

感謝您的鏈接。問題的最後一條評論https://java.net/jira/browse/JAVASERVERFACES-2820?focusedCommentId=372654似乎與此問題有關。 – anotherUser

1

我打這個錯誤時,後處理JSF生成的內容爲PDF格式。另外我注意到使用<h:doctype>會生成兩個文檔類型。

幸運的是,我的後期處理問題是,我可以使用String.replace("<!DOCTYPE html>", XHTML_DOCTYPE)解決此問題。在servlet環境中,您可能必須使用過濾器或包裝HttpServletResponse以即時修改文檔類型。或者你可以修復JSF的實現。這是最有意義的。