Проблема с кодировкой плиток - PullRequest
0 голосов
/ 03 марта 2010

Я пытаюсь использовать кодировку UTF-8 для разрабатываемого приложения Spring, но у меня возникают проблемы с получением правильной кодировки при вставке атрибутов из плиток.

У меня есть этот фрагмент в моем шаблоне JSP:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title><tiles:getAsString name="title" /></title>   
</head>
<body>
    <tiles:insertAttribute name="header" ignore="true" />
....

и в моем файле конфигурации XML плиток у меня есть что-то вроде:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
   "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
   <definition name="tiles:base" template="/WEB-INF/views/templates/main.jsp">
     <put-attribute name="title" value="Título" />
...

Я проверяю в eclipse, что эти файлы имеют кодировку UTF-8. Слово, переданное в атрибуте title, не отображается правильно (акцентированные символы отображаются неправильно) на странице, хотя остальная часть JSP является правильной (например, фрагмент JSP, который вставляется в заголовок). Если я изменю кодировку на ISO-8859-1, заголовок будет в порядке, но остальная часть страницы неверна. Кажется, я не могу изменить кодировку на UTF-8 в моем файле плиток. Я также искал "ISO-8859-1" в файлах, которые я создал, и я не настроил эту конфигурацию ни в одном файле.

Может кто-нибудь сказать мне, как я могу установить правильную кодировку для плиток?

Спасибо

Ответы [ 4 ]

9 голосов
/ 04 июля 2012

Добавьте следующее к web.xml. Это имеет тот же эффект, что и добавление заголовка в каждый файл JSP.

web.xml:

<web-app>
    ...
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
            <trim-directive-whitespaces>true</trim-directive-whitespaces>
        </jsp-property-group>
    </jsp-config>    
</web-app>
3 голосов
/ 05 марта 2010

Это была проблема с кодировкой, а не с кодировкой. Я должен был установить

<%@ page contentType="text/html; charset=utf-8"%> 

в каждой JSP, и это сработало. Я не знаю, есть ли более простой способ настроить это во всех JSP веб-приложения Spring.

1 голос
/ 29 августа 2018

Во время перехода с Struts с 2.3 на 2.5 я столкнулся с похожей проблемой: тип содержимого (в заголовке ответа) всех файлов JAVAScript .JS, на которые ссылается JSP, теперь был «application / javascript; charset = ISO-8859-1» (Struts2.5) вместо charset = UTF-8 (в стойках 2.3).Атрибут Charset был установлен в utf-8 для JSP и разметки скрипта, ссылающейся на файл js.

Я добавил код от Leonel, и он наконец заработал: но кодировка теперь "text / html; charset = UTF-8",Итак, я потерял приложение / JavaScript.это не сработало должным образом.

<web-app>
...
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.js</url-pattern>
        <page-encoding>UTF-8</page-encoding>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>    

Итак, я попробовал что-то еще: https://www.baeldung.com/tomcat-utf-8 С этим я получаю правильную кодировку и тип контента.

Давайте определим класс с именем CharacterSetFilter:

public class CharacterSetFilter implements Filter {

// ...

public void doFilter(
  ServletRequest request, 
  ServletResponse response, 
  FilterChain next) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    next.doFilter(request, response);
}

// ...
}

Нам нужно добавить фильтр в файл web.xml нашего приложения, чтобы он применялся ко всем запросам и ответам:

<filter>
 <filter-name>CharacterSetFilter</filter-name>
 <filter-class>com.baeldung.CharacterSetFilter</filter-class>
</filter>

<filter-mapping>
 <filter-name>CharacterSetFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
1 голос
/ 22 июля 2011

Другим способом может быть использование ReloadableResourceBundleMessageSource (со свойством defaultEncoding = "UTF-8") также для содержимого, вставляемого из плиток.

Я имел в виду, что вы можете передать ключевое слово из плиток и использовать его для вывода необходимого контента из пакета ресурсов, например:

<tiles:useAttribute id="title_key" name="title"/>
<spring:message code="${title_key}"/>
...