Olá galera,
Estava meio afastado do forum, mas agora estou de volta! 
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