h:outputScript标签和charset属性,有可能吗?

时间:2011-05-05 19:16:37

标签: eclipse jsf character-encoding

首先,我想说我已经在another forum发布了这个问题,但是直到现在我还没有得到任何答案,这对我来说是一个重要的问题,我我也在这里问。

HTML <script>标记具有charset属性,但我无法使用<h:outputScript>标记指定此属性。我尝试使用preRenderComponent系统事件并手动输入属性但它没有效果;该属性未呈现。有没有办法指定charset属性,甚至是以编程方式?

2 个答案:

答案 0 :(得分:2)

一直使用UTF-8。 Facelets默认为UTF-8。您应该注意配置编辑器/ IDE以将所有基于文本的资源保存为UTF-8。在Eclipse中,您需要转到 Window»Preferences 并输入过滤器文本编码。在已过滤的首选项(工作区,JSP文件等)的全部中,您可以从下拉列表中选择所需的编码。

enter image description here

您可能希望对现有文件进行少量编辑(添加/删除空间或其他内容)以强制Eclipse再次将其另存为UTF-8。

另见:

答案 1 :(得分:0)

如果您的javascript文件位于您的webapp引用的另一个JAR中,并且您无法将其转换为其他编码,则应使用过滤器为该特定文件设置内容类型。我注意到JSF中没有常见的设置。 另外,我发现在JSF中覆盖javax.faces.resource.Script的默认渲染器是可能的,但我认为这不是一个好策略,所以如果有人找到更好的解决方案,请张贴!

public class SetContentEncodingFilter implements Filter {
private final Map<String, String> pathEncodingMap = new HashMap<>();

@Override
public void destroy() {
    pathEncodingMap.clear();
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    String requestURI = req.getRequestURI();
    if (requestURI != null && pathEncodingMap.containsKey(requestURI)) {
        String encoding = pathEncodingMap.get(requestURI);
        response.setCharacterEncoding(encoding);
    }
    chain.doFilter(request, response);
}

@Override
public void init(FilterConfig config) throws ServletException {
    Enumeration<String> parameterNames = config.getInitParameterNames();
    while (parameterNames.hasMoreElements()) {
        String path = parameterNames.nextElement();
        String encoding = config.getInitParameter(path);
        pathEncodingMap.put(config.getServletContext().getContextPath() + path, encoding);
    }
}

}

  

在web.xml中声明过滤器:

<filter>
    <filter-name>localizedResources</filter-name>
    <filter-class>br.mpt.mp.recad.config.SetContentEncodingFilter</filter-class>
    <init-param>
        <param-name>/javax.faces.resource/jq/ui/i18n/datepicker-pt.js.xhtml</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>localizedResources</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

或者如果您愿意,可以使用Spring的org.springframework.web.filter.CharacterEncodingFilter

还有OmniFaces替代方案:CharacterEncodingFilter