2010-09-27 125 views
8

我強烈需要覆蓋JSF 2.0 Content-Type標題。默認情況下它是JSF,覆蓋HTTP標頭

Content-Type:application/xhtml+xml; charset=UTF-8 

但我需要

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

感謝。

回答

5

如何

<f:view contentType="text/html" /> 
+0

該解決方案是必要的工作與舊版本的iPhone和iPad。似乎稍後的瀏覽器會覆蓋默認的Content-Type並進行最佳猜測。但是較老的瀏覽器都在考慮Content-Type標題並期待標題。很簡單的解決方案。 – JeffJak 2012-12-13 22:38:52

6

使用right doctype

<!DOCTYPE html> 

沒有更多。頂部也不要放<?xml?>聲明。這是最小模板:

<!DOCTYPE html> 
<html 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <title>Insert your title</title> 
    </h:head> 
    <h:body> 
     <h1>Hello World</h1> 
    </h:body> 
</html> 

這是HTML5的文檔類型。它與XHTML 1.x標記完全兼容,並增加了更多優勢。

+0

刪除了我不清楚的答案,並感謝您清除它。 – 2010-09-27 13:58:03

3

以下方法適用於所有的瀏覽器:

寫的PhaseListener:

public class ContentTypePhaseListener implements PhaseListener { 


     public PhaseId getPhaseId() 
     { 
      return PhaseId.RENDER_RESPONSE; 
     } 

     public void afterPhase(PhaseEvent event) 
     { 
     } 

     public void beforePhase(PhaseEvent event) 
     { 
      FacesContext facesContext = event.getFacesContext(); 
      HttpServletResponse response = (HttpServletResponse) facesContext 
        .getExternalContext().getResponse(); 
      response.addHeader("Content-Type", "text/html; charset=UTF-8"); 

     } 
    } 

,並在faces-context.xml中進行註冊:

<lifecycle> 
     <phase-listener>com.mycompnay.listener.ContentTypePhaseListener </phase-listener> 
    </lifecycle> 
+0

對於這個簡單問題,「PhaseListener」是不是有點過於複雜的「解決方案」?無論如何,爲什麼不只是一個'Filter',因爲你不會對'FacesContext'感興趣? – BalusC 2010-09-27 12:55:23

+0

1.它可以在所有的瀏覽器中運行2.他可能在將來需要它 – Dejell 2010-09-27 12:59:05

+0

1.我不確定如何在'PhaseListener'而不是'Filter'內完成任務,網頁瀏覽器。你能詳細說明嗎? 2.也許。 – BalusC 2010-09-27 13:05:34