открытие jsf-приложения в интрасети в режиме совместимости в IE9

1

Я сделал сайт интрасети в jsf, primefaces. из-за IE 9 по умолчанию он открывается в представлении совместимости. я знаю, что я должен использовать тег

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

но он не работает, а показывает

HTML1115: X-UA-совместимый тег META ('IE = edge') игнорируется, поскольку режим документа уже завершен.

я использовал тег как таковой

<!DOCTYPE html>
<html lang="en" 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">
<h:head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>Wan</title>



</h:head>

это то, что он показывает в инструментах разработчиков

<head>
<TITLE>Wan</TITLE><LINK rel=stylesheet type=text/css href="/Wan/javax.faces.resource/theme.css.jsf?ln=primefaces-redmond"><LINK rel=stylesheet type=text/css href="/Wan/javax.faces.resource/primefaces.css.jsf?ln=primefaces&amp;v=5.1">
<SCRIPT type=text/javascript src="/Wan/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces&amp;v=5.1"></SCRIPT>

<SCRIPT type=text/javascript src="/Wan/javax.faces.resource/primefaces.js.jsf?ln=primefaces&amp;v=5.1"></SCRIPT>

<SCRIPT type=text/javascript src="/Wan/javax.faces.resource/jquery/jquery-plugins.js.jsf?ln=primefaces&amp;v=5.1"></SCRIPT>
<LINK rel=stylesheet type=text/css href="/Wan/javax.faces.resource/charts/charts.css.jsf?ln=primefaces&amp;v=5.1">
<SCRIPT type=text/javascript src="/Wan/javax.faces.resource/charts/charts.js.jsf?ln=primefaces&amp;v=5.1"></SCRIPT>

<STYLE id=ex_canvas_>canvas {
    TEXT-ALIGN: left; WIDTH: 300px; DISPLAY: inline-block; HEIGHT: 150px; OVERFLOW: hidden
}
</STYLE>
<LINK rel=stylesheet type=text/css href="/Wan/javax.faces.resource/wanstyle.css.jsf?ln=css">
<META content=IE=edge http-equiv=X-UA-Compatible>

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

как сделать мой метатег первым признаком в моем приложении

это то, что показывает консоль в IE.

HTML1202: http://10.164.210.37:8080/Wan/welcome.jsf is running in Compatibility View because 'Display intranet sites in Compatibility View' is checked. 
welcome.jsf
HTML1115: X-UA-Compatible META tag ('IE=edge') ignored because document mode is already finalized. 
welcome.jsf
S15: :visited and :link styles can only differ by color. Some styles were not applied to :visited. 
  • 0
    Возможная копия Как исправить перезапуск режима документа в IE 9
  • 0
    @Jens Йенс Я прочитал другой вопрос ранее и понимаю, какой ответ пытается ответить, но я не уверен, как можно применить его к своему коду. прочитай мою последнюю строчку
Показать ещё 1 комментарий
Теги:
jsf
primefaces
internet-explorer

2 ответа

3
Лучший ответ

В jsf PrimeFaces вам необходимо использовать следующее, чтобы изменить порядок тегов

<f:facet name="first">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  </f:facet>

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

из следующей ссылки

2

Вы можете использовать фильтр сервлета для его решения

Добавьте это в свой web.xml

<filter>
    <filter-name>EdgeFilter</filter-name>
    <filter-class>com.my.package.filter.EdgeFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EdgeFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
</filter-mapping>

Код Java:

public class EdgeFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
            ServletException {
        if (((HttpServletRequest) req).getRequestURI().endsWith(".js.jsf")
                || ((HttpServletRequest) req).getRequestURI().endsWith(".css.jsf")) {
            chain.doFilter(req, res);
        } else {
            HttpServletResponse response = (HttpServletResponse) res;
            response.setHeader("X-UA-Compatible", "IE=edge"); // No more Compatibility Mode
            chain.doFilter(req, res);
        }

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }

}
  • 0
    Большое спасибо за ответ, но я нашел гораздо более простое решение, которое я представил в качестве ответа
  • 1
    Это решение лучше, потому что вам не нужно добавлять метатег на каждую страницу
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню