h: тег outputScript и атрибут charset, возможно ли это? - PullRequest
2 голосов
/ 05 мая 2011

Прежде всего, я хотел бы сказать, что я уже разместил этот вопрос на другом форуме , но, поскольку у меня до сих пор не было ответов, и это важная проблема для я тоже спрашиваю здесь.

Тег HTML <script> имеет атрибут charset, но я не могу указать этот атрибут с помощью тега <h:outputScript>. Я попытался использовать системное событие preRenderComponent и поставить атрибут вручную, но это не имело никакого эффекта; атрибут не был представлен. Есть ли способ указать атрибут charset, даже программно?

Ответы [ 2 ]

2 голосов
/ 06 мая 2011

Просто используйте UTF-8 все время.По умолчанию Facelets уже использует UTF-8.Вы должны позаботиться о том, чтобы вы сконфигурировали свой редактор / IDE для сохранения всех текстовых ресурсов как UTF-8.В Eclipse вам нужно перейти в Окно »Настройки и ввести кодировку текста фильтра.В всех отфильтрованных предпочтениях (Рабочая область, файлы JSP и т. Д.) Вы можете выбрать нужную кодировку из выпадающего списка.

enter image description here

Возможно, вы захотите внести незначительные изменения (добавить / удалить пробел или что-то) в существующие файлы, чтобы заставить Eclipse снова сохранить их как UTF-8.* См. Также:

0 голосов
/ 21 марта 2017

Если ваш файл javascript находится в другом 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>

или, если хотите, использовать org.springframework.web.filter.CharacterEncodingFilter от Spring

Существует также альтернатива OmniFaces: CharacterEncodingFilter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...