PrimeFaces + JSF x IE8: Forçar Modo de Documento do IE8 para o "IE8 Standards"

7 respostas
V

Pessoal, tenho algumas telas de um sistema JavaWeb usando JSF+Primefaces...

Tudo fica normal no Google Chrome e Firefox 12, como nas imagens abaixo:
Firefox 12:
[img]http://s18.postimage.org/uyxqfa6rr/FIREFOX12.png[/img]

Quando eu vou para o IE8, as tabelas e botões não seguem o meu padrão.
IE8:
[img]http://s7.postimage.org/xp72chit5/IE8.png[/img]

Uma solução paliativa para o problema, seria lá no Developer Tools (Ferramentas de desenvolvedor), setar o Modo de Documento para Padrões do Internet Explorer 8 (IE8 Standards)

IE8 Standards:
[img]http://s14.postimage.org/uj4jn0g1b/IE8_standards.png[/img]

No entanto, eu queria isso de forma automática, algum script, ou tag, qualquer solução que forçasse o IE8 a automaticamente setar esse modo de documento. Porque atualmente sempre que abrimos o Sistema no IE8, o Modo de Documento setado é o Modo de Documento Quirks

Alguém pode me ajudar? Já procurei uma solução para isso em vários fóruns, no próprio fórum do primefaces, mas ninguém soube ajudar e as soluções que vi não serviram para mim. Deve ser algo simples, mas realmente não estou conseguindo resolver.
:(

Exemplo dos códigos... TEMPLATE teste:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">

<h:head>
	<title>My Application</title>
	<meta http-equiv="X-UA-Compatible" content="IE=8" />
	<h:outputStylesheet library="css" name="portal.css" />

	<script type="text/javascript">
	<!--
	     ...
	//-->
	</script>
</h:head>

<h:body>
	...
</h:body>
</html>
templateComMenuSemLogout
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	template="/templates/templateTeste.xhtml">

	<ui:define name="barraMenu">
		<ui:insert name="menu" />
	</ui:define>
	
	<ui:define name="conteudo" >
		<ui:include src="navegacao.xhtml" />
		<ui:include src="/views/comum/loadingDialog.xhtml"/>
		<ui:insert name="content" />
	</ui:define>
</ui:composition>

7 Respostas

E
V

Eu já mudei a TAG DOCTYPE, e já incluí essa tag meta, mas o programa não faz com que o IE8 renderize no modo padrão.

Sempre vai para o Quirks…

E

vanegomesl:
Eu já mudei a TAG DOCTYPE, e já incluí essa tag meta, mas o programa não faz com que o IE8 renderize no modo padrão.

Sempre vai para o Quirks…

Será que o PrimeFaces põe alguma coisa no HTML gerado que não deixa o IE ir para o modo “Standard”? Não estou com uma instalação aqui para ver exatamente o que é gerado - é interessante você pegar essa página e dar um “View Source” para ver se o HTML tem alguma tranqueira que o IE não está gostando.

V

Vou dar uma olhada.

Valeu!

V

Pessoal, consegui resolver. Além de adicionar a tag meta no head, implementamos o seguinte filtro:

public class IE8CompatablityFixFilter implements Filter {
   @Override
   public void doFilter(ServletRequest request, ServletResponse response,
         FilterChain chain) throws IOException, ServletException {
      ((HttpServletResponse) response).setHeader("X-UA-Compatible", "IE=8");
        chain.doFilter(request, response);
   }

   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
      // nothing to do
   }

   @Override
   public void destroy() {
      // nothing to do
   }
}

http://forum.primefaces.org/viewtopic.php?f=3&t=22724&p=70146#p70146

C

Este filtro vc declarou aonde?

F

camilooscar:
Este filtro vc declarou aonde?

Camilo basta vc declarar no seu webxml onde que o sistema vai colocar esse filtro que vc criou!

<filter>
    <filter-name>Filter Compatibilidade</filter-name>
    <filter-class>com.accenture.filter.IE8CompatablityFixFilter</filter-class>
 </filter>

neste código acima criei o filtro dando seu nome e o pacote com o nome da classe…

<filter-mapping>
    <filter-name>Filter Compatibilidade</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

nesse código acima eu chamei o nome do meu filtro criado e dei um pattern pra ele, ou seja, esse filtro vai pegar todas as páginas que eu tiver criado dentro do meu webcontent…não importando se estiver dentro de subpastas…

abs!

Criado 15 de junho de 2012
Ultima resposta 27 de jun. de 2013
Respostas 7
Participantes 4