Mentawai Web Framework

Redirecionamento

O Mentawai possui três tipos diferentes de redirecionamento. Diferentemente de um forward, em um redirecionamento o browser faz uma nova requisição http para servidor e toda a informação sobre a action é descartada.

O primeiro tipo é o mais comum aonde você simplesmente define uma URL final para o redirecionamento:

public class ApplicationManager extends org.mentawai.core.ApplicationManager {
	
    public void loadActions() {
		
        // Java style
        ActionConfig ac1 = new ActionConfig("/Action1", Action1.class);
        ac1.addConsequence(SUCCESS, new Redirect("/welcome.jsp"));
        ac1.addConsequence(ERROR, new Forward("/error.jsp"));
        addActionConfig(ac1);
        
        // Ruby style
        action("/Action1", Action1.class)
            .on(SUCCESS, redir("/welcome.jsp"))
            .on(ERROR, fwd("/error.jsp"));
        
	}
}
					

O segundo tipo é quando você precisa passar parâmetros dinâmicos para a URL que será redirecionada. Nesse caso o Mentawai colocará todos os valores de saída de uma action como parâmetro na URL. Se o valor (objeto no output) não for uma String, o método toString() é utilizado para a conversão. Para utilizar essa forma de redirecionamento, tudo que você precisa fazer é usa o construtor abaixo:

public class ApplicationManager extends org.mentawai.core.ApplicationManager {
	
    public void loadActions() {
		
        // Java style
        ActionConfig ac1 = new ActionConfig("/Action1", Action1.class);
        ac1.addConsequence(SUCCESS, new Redirect("/welcome.jsp", true));
        ac1.addConsequence(ERROR, new Forward("/error.jsp"));
        addActionConfig(ac1);
        
        // Ruby style
        action("/Action1", Action1.class)
            .on(SUCCESS, redir("/welcome.jsp", true))
            .on(ERROR, fwd("/error.jsp"));
	}
}
				

Por exemplo, se você quizer passar o id de um usuário junto com a URL de redirecionamento, você pode fazer assim:

public class Action1 extends BaseAction {
	
	public String execute() throws Exception {
		String id = "12";
		output.setValue("id", id);
		return SUCCESS;
	}
	
}
		

Nesse nosso exemplo, o Mentawai redirecionará o browser para o seguinte endereço:

    http://www.myapp.com/welcome.jsp?id=12

O terceiro tipo de redirecionamento é quando você não sabe em tempo de compilação qualquer informação sobre a URL a ser usada para o redirecionamento. Isso pode acontecer, por exemplo, se você quer redirecionar o browser para um bookmark armazenado em uma base de dados. A título de curiosidade, o org.mentawai.filter.RedirectAfterLoginFilter utiliza esse tipo de redirecionamento para executar um redirect after login.

Quando você usa esse tipo de redirecionamento, o Mentawai procura por um valor de saída da action chamado url e usa como o endereço de redirecionamento. Para indicar esse tipo de redirecionamento, você usa a forma especial do construtor sem parâmetros:

public class ApplicationManager extends org.mentawai.core.ApplicationManager {
	
    public void loadActions() {
		
        // Java style
        ActionConfig ac1 = new ActionConfig("/Action1", Action1.class);
        ac1.addConsequence(SUCCESS, new Redirect());
        ac1.addConsequence(ERROR, new Forward("/error.jsp"));
        addActionConfig(ac1);
        
        // Ruby style
        action("/Action1", Action1.class)
            .on(SUCCESS, redir())
            .on(ERROR, fwd("/error.jsp"));
        
	}
}
				

Então uma action teria que definir um valor de saída para uma url.

public class Action1 extends BaseAction {
	
	public String execute() throws Exception {
		String url = "http://www.another.com/show.jsp?id=12";
		output.setValue(Redirect.REDIRURL_PARAM, url);
		return SUCCESS;
	}
	
}