1

你好

我有一个问题,如果我将我的模板定义为 UTF-8 页面,该行为不应该应用于所有调用它的包含吗?

我创建了一个简单的模板,它打印“a ñu is a gnu (this one works)”,这意味着它可以理解并正确处理“ñ”字符。但是,当我包含另一个页面 (chupacabra) 时,如果我尝试打印一个包含相同 'ñ' 字符的单词,我会得到一个 com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:invalid byte

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>
4

1 回答 1

1

您的 Facelets 文件以错误的字符编码保存。您需要使用 UTF-8 保存它们。在 Eclipse 中,您可以通过Window > Preferences > General > Workspace > Text File Encoding进行设置:

在此处输入图像描述

修复后编辑并重新保存所有模板。即使只使用错误的编码保存了一个包含文件或主模板,那么整个事情仍然会失败。

请注意,XML 序言<?xml ... ?>是不必要的。它只告诉 XML 解析器(阅读:Facelets 的 SAX 编译器)有关已保存 XML 文件的版本和编码。但它已经默认为 UTF-8。您可以安全地摆脱它们。这对 MSIE 浏览器也更加友好。

于 2013-02-06T22:08:42.160 回答