2013-02-06 20 views
1

我ijsf2 facelets:應該足以在模板中聲明utf-8嗎?

我有一個問題,如果我將我的模板定義爲UTF-8頁面,不應該將該行爲應用於所有包含它的調用嗎?

我創建了一個簡單的模板,它打印出「añu是一個gnu(這個工程)」,這意味着它可以理解和正確處理'ñ'字符。但是,當我包含另一個頁面(chupacabra),如果我嘗試打印包含相同'ñ'字符的單詞,我收到com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:無效字節

simple_template.xhtml

<?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" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     > 

    <h:head> 

    </h:head> 
    <h:body style="background-color:black;" > 
     a ñu is a gnu (this one works) 
     <ui:insert name="contenido"/> 
    </h:body> 
</html> 

chupacabra.xhtml

<ui:composition 
    template="/paginas/comun/simple_template.xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:dabit="http://java.sun.com/jsf/composite/components"> 
      <ui:define name="contenido"> 
<h:form> 
    añoo (this one wont work) 

    </h:form> 
    </ui:define> 
    </ui:composition> 
+0

也許這只是編輯器的錯誤編碼。如果您正在使用eclipse打開的文件屬性並查看** chupacabra.xhtml的編碼** – partlov

+0

您使用哪種編輯器來編輯/保存Facelets文件?蝕? – BalusC

+0

@partlov謝謝partlov。 rightclicked chupacabra.xhtml,屬性,資源,設置文本文件編碼爲utf-8,關閉eclipse,運行eclipse -clean,仍然得到相同的異常。 –

回答

1

你Facelets文件都被保存在錯誤的字符編碼。您需要使用UTF-8保存它們。在Eclipse中,您可以設置通過窗口>首選項>常規>工作空間>文本文件編碼

enter image description here

編輯和修復,經過重新保存所有模板。即使只有一個包含文件或主模板使用錯誤的編碼保存,整個事件仍然會失敗。

請注意,XML prolog <?xml ... ?>是不必要的。它只告訴XML解析器(讀取:Facelets的SAX編譯器)關於保存的XML文件的版本和編碼。但它已經默認爲UTF-8。你可以放心地擺脫它們。這對MSIE瀏覽器也更友好。

相關問題