Если ваш файл 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