[quote=mendigosujo]Fala rapaz
Vamos por partes:
Você trabalha usando o DispatchAction e todas as ações referentes a Action do Cadastro, vamos supor que, estão na CadastroAction. Sua classe CadastroAction extende a DispatchAction e a classe mãe tem um método chamado dispatchMethod. Na sua classe CadastroAction você precisa sobrescrever esse método, vou te explicar o pq:
-
No momento que vc acessar o http://localhost:8080/sudeval/cadastroAction.do, ele vai entrar na classe CadastroAction e por ser a primeira vez que entra, ele não vai ter nenhuma ação setada e se não tiver o método sobrescrito, vai dar erro.
-
Sobrescrevendo o método, você pode preencher todas as listas que você quer, setar na requisição e lá na JSP, você vai recuperar e seta no select do html através da tag <c:forEach>.
[/quote]
Ok, aqui você me deu o toque de como resolver uma das minhas dúvidas ( a de listar dados dinâmicos ao chamar um .jsp, embora seja usando o dispatchaction, mas saquei), mas nesse caso o DispatchAction poderia ter os N metodos de um CRUD por exemplo ne ?
vou estar dando uma olhada no Validator
[quote=mendigosujo]
Me parece que sua dúvida é como setar as ações para classe, é bem simples. Na sua jsp você cria um hidden field com o nome de acao, por exemplo. No seu struts-config você adiciona na tag correspondente aquela jsp o atributo parameter=“acao”. Esse campo acao PRECISA ter o mesmo nome do seu metodo da classe Action que voce deseja chamar.
Para setar o value da acao no campo hidden, use uma funcao javascript e é só correr pro abraço depois
[]'s[/quote]
Na verdade não era essa a minha dificuldade, isso eu ja faço, so que eu o chamo fazendo algo assim por exemplo:
<html:link action="/usuarioAction.do?method=prepareUsuario">
<bean:message key="registrar"/>
</html:link>
mais obrigado :D.
[color=blue]------- [/color]
vou tentar colocar alguns códigos para mostrar o meu problema.
[color=blue]------------------------------[/color]
Digamos que eu tenha o meu struts-config.xml dessa forma:
<action path="/usuarioAction"
name="UsuarioForm"
type="br.com.sav.action.UsuarioAction"
input="registroPageDef"
parameter="method" >
<forward name="registro" path="registroPageDef" />
<forward name="ok" path="homePageDef" />
<forward name="failedRegistro" path="falhaRegistroPageDef" />
<forward name="failedLogin" path="falhaLoginPageDef" />
</action>
e que eu tenha um UsuarioForm que sobrescreva o metodo validate
public class UsuarioForm extends ActionForm {
get e sets ...
public ActionErrors validate(ActionMapping map, HttpServletRequest req) {
ActionErrors erros = new ActionErrors();
if (getNome() == null) {
erros.add("nome", new ActionMessage("errors.campoNome"));
}
os demais testes de preenchimentos ...
return erros;
}
}
e que eu tenha o meu UsuarioAction:
public class UsuarioAction extends DispatchAction {
public ActionForward prepareUsuario(ActionMapping map,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
// aqui eu vou obter alguns valores para a exibição de informações (como estados, tipo de endereços e etc.....) e colocaria na requisicao
// ex.:
/* Estados */
List<Estado> listEstado = EnderecoRepository.getEstados(); // sera que ele deveria vir de Endereco?
request.setAttribute("listEstado", listEstado );
return map.findForward("registro");
}
public ActionForward registrar(ActionMapping map,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
UsuarioForm usuarioForm = (UsuarioForm)form;
Usuario usuario = usuarioForm.getUsuario();
usuario.setEndereco(usuarioForm.getEndereco());
usuario.registrar();
/* tudo ok, colocar o usuário na sessão */
request.getSession().setAttribute("usuario", usuario);
return map.findForward("ok");
}
// atualizar
// obter
}
o que eu estou tentando explicar é que, quando eu chama o
action="/usuarioAction.do?method=prepareUsuario">
mesmo esse metodo não sendo o de registrar ( ele é um antes, o que me traz as informações 1o), o UsuarioForm vai tentar validar e como eu ainda não estou na tela do registro do usuário ( return map.findForward(“registro”); ) eu com certeza não vou ter esses campos válidos, ae sempre vai me retornar para a página configurada no input, com os erros de preenchimentos.
então, a minha dúvida é como eu consigo evitar isso? utilizando o DispatchAction e fazendo a validação pelo Form. ( uma forma de “driblar” que ele fique checando se os dados estão OK, antes de eu está na página de inserir os dados )
Desculpa se você tiver respondido e eu não tiver conseguido enxergar
Agradeço!