Pessoal, alguém sabe se da pra usar a validação do struts 2 tanto no client quanto no server? O motivo é que caso o javascript esteja desabilitado ainda assim ele deveria realizar a validação dos dados no servidor…
Struts 2 Validation - No client e server é possível?
11 Respostas
Não trabalho com Struts, mais é sim possível, apenas valide com javascript no formulário e no servidor também,
mais na minha opinião, validações são de responsabilidade do servidor, imagine a seguinte situação:
Um usuário descobre seus parâmetros que são lançados via um formulário que você valida via javascript e os coloca na url
http://seuContexto/action.do?nome=Jose&id152
daí ele executa a ação sem poder…
Exatamente por poder fazer isso que eu gostaria que validasse nos dois lados.
Mas eu não queria fazer o javascript para isso, e sim usar o javascript gerado pelo validador do framework, para não precisar escrever duas regras diferentes…
Colocando o parametro validate=“true” no meu form consigo realizar a validação no client usando o javascript gerado automaticamente, mas caso eu desabilite o javascript do browser ele não valida no servidor.
Retirando o validate=“true” apenas valida no server.
Como vc disse, eu mesmo escrever um javascript para isso resolveria, mas a intenção inicial era usar o javascript gerado pelo framework para não precisar duplicar regras de negócio…
Renato, você conseguiu resolver esse problema?
A sua action está extends ActionSuport?
…
Acho que não tem como, é um ou outro.
Mas estou fazendo usando ajax através do framework extjs. Dá mais trabalho, mas até que ta valendo a pena.
Pois é… Já pesquisei bastante e tbem não encontrei uma forma…
Tudo bem que da versão 1 para a 2 do Struts tudo mudou, mas no Struts 1.xx isso era fácil de fazer…
Vou tentar mais um pouco, se descobrir algo retorno o tópico.
[]s
Para funcionar no lado servidor basta colocar o arquivo xml de validação no mesmo package da classe action.
ex:
UsuarioAction-loginUsuario-validation.xml
onde:
UsuarioAction = Classe action
loginUsuario = nome do mapeamento (.do)
Porém, não consegui fazer funcionar no lado cliente…
Em cima dos métodos que não precisarem de validação coloca a Annotation @SkipValidation.
Olá pessoal,
Eu estou fazendo a validação de entrada do lado servidor no action. Por exemplo: No UsuarioAction eu tenho o seguinte código:
public String incluir() {
try {
if (verificarDadosIncluir()) {
return SOLICITAR_INCLUSAO;
}
// ..... fazendo a inclusão
return execute();
} catch (MinhaException ex) {
// ............ Tratamento da exceção
addActionError("Erro");
return SOLICITAR_INCLUSAO;
}
}
private boolean verificarDadosIncluir() {
boolean hasError = false;
if (usuario != null && (usuario.getNome() == null
|| usuario.getNome().equals(""))) {
hasError = true;
addFieldError("nome", getText("view.nome.requerido"));
}
if (usuario != null && (usuario.getLogin() == null
|| usuario.getLogin().equals(""))) {
hasError = true;
addFieldError("login", getText("view.login.requerido"));
}
return hasError;
}
E desta forma tem funcionado. Aproveitando, gostaria de perguntar se você já trabalharam com validação no struts 2 usando actions alias. Não encontrei muita coisa. Tenho o seguinte problema: No código acima tenho o método incluir() e quero colocar validação do lado cliente apenas para esse método do UsuarioAciton. E vi que posso fazer algo do tipo UsuarioAction-Usuario!incluir-validation.xml ao invés de UsuarioAction-validation.xml. Contudo, o action com alias não está funcionando, o que deve existir para ele funcionar? Não encontrei muita informação de como definir alias.
Desde já agradeço a ajuda!
Olá Pessoal,
Ainda não está funcionando a validação com "actions alias". Vou colocar em detalhes como está configurado o meu projeto.
O meu jsp tem o seguinte formulário:<s:form action="Usuario!pesquisar" validate="true">
<s:textfield label="%{getText('view.usuario.nome')}" name="nome"/>
<s:textfield label="%{getText('view.usuario.login')}" name="login" />
<s:select list="perfis" label="%{getText('view.usuario.perfil')}"
listKey="id" listValue="nome" name="perfil.id"
headerKey="0" headerValue=" -- Selecionar -- " />
<s:submit key="view.button.usuario.pesquisar" />
<s:submit key="view.button.usuario.incluir" action="Usuario!solicitarInclusao" />
</s:form>
/**
* AgendaAction extends ActionSupport.
*/
public class UsuarioAction extends AgendaAction {
private List<Usuario> usuarios;
private List<Perfil> perfis;
private Usuario usuario;
public String pesquisar() throws Exception {
logger.info("pesquisar()");
List<Usuario> lista = getAgenda().pesquisar(getLogin(), getNome(), getPerfil());
setUsuarios(lista);
setPerfis(getAgenda().listarPerfis());
setUsuario(null);
return SUCCESS;
}
public String getNome() {
if (usuario != null) {
return usuario.getNome();
}
return null;
}
public void setNome(String nome) {
if (usuario == null) {
usuario = new Usuario();
}
usuario.setNome(nome);
}
// Restante dos métodos, seguem o mesmo padrão do getNome e setNome.
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="Logon!*" method="{1}" class="cc.co.taciano.agenda2.actions.LogonAction">
<result name="success">/paginas/home.jsp</result>
<result name="input">/paginas/logon.jsp</result>
</action>
<action name="Home" class="cc.co.taciano.agenda2.actions.AgendaAction">
<result>/paginas/home.jsp</result>
</action>
<action name="Usuario!*" method="{1}" class="cc.co.taciano.agenda2.actions.UsuarioAction">
<result>/paginas/usuario/listar.jsp</result>
<result name="solicitarInclusao">/paginas/usuario/incluir.jsp</result>
<result name="solicitarAlteracao">/paginas/usuario/alterar.jsp</result>
</action>
<action name="Contato" class="cc.co.taciano.agenda2.actions.ContatoAction">
<result>/paginas/contato/listar.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="login">
<field-validator type="requiredstring">
<message key="loginrequerido"/>
</field-validator>
</field>
</validators>
<script type="text/javascript">
function validateForm_Logon() {
form = document.getElementById("Logon");
clearErrorMessages(form);
clearErrorLabels(form);
var errors = false;
// field name: username
// validator name: requiredstring
if (form.elements['username']) {
field = form.elements['username'];
var error = "Login Requerido!";
if (field.value != null && (field.value == "" || field.value.replace(/^\s+|\s+$/g,"").length == 0)) {
addError(field, error);
errors = true;
}
}
// field name: password
// validator name: requiredstring
if (form.elements['password']) {
field = form.elements['password'];
var error = "Senha Requerida!";
if (field.value != null && (field.value == "" || field.value.replace(/^\s+|\s+$/g,"").length == 0)) {
addError(field, error);
errors = true;
}
}
return !errors;
}
</script>
<script type="text/javascript">
function validateForm_Usuario() {
form = document.getElementById("Usuario");
clearErrorMessages(form);
clearErrorLabels(form);
var errors = false;
return !errors;
}
</script>
Alguém pode me indicar um caminho?