Interceptor - VRaptor 2.5

4 respostas
maruero

Olá galera,

Estava meio afastado do forum, mas agora estou de volta! :smiley:

A minha dúvida é o seguinte:
Estou desenvolvendo um site para celulares usando JSP + VRaptor2.5 + Tomcat.
Cada página deve ter uma diferente versão para três tipos de celulare: blackberry, celulares com windows mobile, e uma versão padrão em WML.

Gostaria então de criar uma Interceptor que iria pegar a respostas das Logic e direcionar para a JSP correspondente ao browser do celular.

A interceptor que fiz até agora é a seguinte:

public class CellTypeInterceptor implements Interceptor{

	private final String WML_TYPE = "winwap"; //Emulador de wml
	private final String WIN_TYPE = "mozilla"; //win - firefox
	private final String BLACKBERRY_TYPE = "blackberry"; //Está errado!
	
	private String cellType;
	
	private HttpServletRequest servletRequest;
	
	public CellTypeInterceptor( HttpServletRequest request ){
		this.servletRequest = request;
	}
	
	public void intercept(LogicFlow flow) throws LogicException, ViewException {
		 
		 flow.execute();
		 		 
		 Object comp = flow.getLogicRequest().getLogicDefinition().getComponent();
		 if( comp instanceof MainMenuLogic ){
			 LogicMethod method = flow.getLogicRequest().getLogicDefinition().getLogicMethod();
			 if( method.getName().equals("init")){	 
				 System.out.println( "Browser: " + getBrowserName() );
				 cellType = getBrowserName();
			 }
		 }	 		
		 
		 String customResult = getCorrectJSP(flow);
		 flow.getLogicRequest().confirmResult(customResult);
		
		 
	}

        private String getBrowserName( ){
                //Descobre o browser do celular que está acessando o site.         
               
                ....
        }

        private String getCorrectJSP( LogicFlow flow ){
                //Devolve a resposta de acordo com o celular. Exemplo: se era "ok" retorna "ok.blackberry" quando acessado por um blackberry

                .....
         }

A lógica para descobrir o tipo do celular e mudar o valor de resposta está certa.
Já testei ela utilizando-a no final de cada @Logic e funcionou.

Entretando quando a utilizo com o Interceptor uma exceção é lançada pelo método LogicRequest.confirmeResult(String).
Que no caso é o útimo método que chamo no método intercept() da minha classe CellTypeInterceptor.

A exceção gerada é a:

javax.servlet.ServletException: java.lang.IllegalStateException: the result for the logic was already set

Que pelo jeito é lançado porque eu chamo o método após chamar o método flow.execute();

Alguem saberia me apontar o meu erro?
Ou me indicar uma outra forma de fazer o redirecionamento?

Desde já, obrigado,
Marcelo

4 Respostas

juniorsatanas

Eu pensei que usava XHTML ou WML ao invés de JSP !

Essa eu não sabia !

maruero

Estou usando JSP para gerar WML.

maruero

Ninguem tem uma idéia?

maruero

Ninguem responde nada.
Será que eu postei no lugar errado?

Alguem sabe como eu faço pra mover o tópico para o “Frameworks e Bibliotecas brasileiros”?

Criado 25 de fevereiro de 2010
Ultima resposta 9 de mar. de 2010
Respostas 4
Participantes 2