Action (repare que e um POJO comum, anotado):package br.com.maps.action;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Result;/*** Action de exemplo para o tutorial de Struts 2 com annotation.** @author finx* @created Oct 19, 2009*/public class HelloWorldAction { private String requisicao; private String resposta; /** * Executa a Action. * * @return resultado da execucao da Action. */ @Override @Action(value = "/helloworld", results = { @Result(name = "success", location = "/resposta.jsp"), @Result(name = "input", location = "/index.jsp") }) public String execute() { this.resposta = "Ola! Eu estou executando uma acao do usuario, com a seguinte requisicao: "; return "success"; } /** * Retorna a mensagem da requisicao. * * @return a mensagem da requisicao. */ public String getRequisicao() { return requisicao; } /** * Define a mensagem da requisicao passada como parametro. * * @param requisicao a mensagem da requisicao a ser definida. */ public void setRequisicao(String requisicao) { this.requisicao = requisicao; } /** * Retorna a resposta da requisicao, chamada pelo componente s:property do jsp. * * @return a resposta da requisicao, chamada pelo componente s:property do jsp. */ public String getResposta() { return this.resposta + " [" + this.getRequisicao() + "]."; }}Subindo nossa aplicacao, ela deve ficar com essa cara:Hmmm bem legal ... mas quando eu aperto o botao e nao escrevo nada, a minha resposta e vazia! Ha, ai e que entram os interceptadores. Estendendo nossa action de ActionSupport, ganhamos um fluxo de execucao com interceptadores configurado no arquivo struts-default.xml, e ai e so configurar!Exemplo de requisicao vazia:Um exemplo de como a Action ficaria com validacao:package br.com.maps.action;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Result;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;import com.opensymphony.xwork2.validator.annotations.Validations;/*** Action de exemplo para o tutorial de Struts 2 com annotation.** @author finx* @created Oct 19, 2009*/public class HelloWorldAction extends ActionSupport { private String requisicao; private String resposta; /** * Executa a Action. * * @return resultado da execucao da Action. */ @Override @Action(value = "/helloworld", results = { @Result(name = "success", location = "/resposta.jsp"), @Result(name = "input", location = "/index.jsp") }) @Validations(requiredStrings = @RequiredStringValidator(fieldName = "requisicao", message = "Campo obrigatorio")) public String execute() { this.resposta = "Ola! Eu estou executando uma acao do usuario, com a seguinte requisicao: "; return "success"; } /** * Retorna a mensagem da requisicao. * * @return a mensagem da requisicao. */ public String getRequisicao() { return requisicao; } /** * Define a mensagem da requisicao passada como parametro. * * @param requisicao a mensagem da requisicao a ser definida. */ public void setRequisicao(String requisicao) { this.requisicao = requisicao; } /** * Retorna a resposta da requisicao, chamada pelo componente s:property do jsp. * * @return a resposta da requisicao, chamada pelo componente s:property do jsp. */ public String getResposta() { return this.resposta + " [" + this.getRequisicao() + "]."; }}E um exemplo de como ficaria a nossa requisicao vazia, com validacao:Finalmente, com o fluxo completo:E, disponibilizando o exemplo utilizado nesse tutorial na pagina de projetos do blog.