Boa noite pessoal,
Gostaria de pedir ajuda com o processo de validação do struts2. Tenho o seguinte código:
@Namespace("/permissoes")
public class GrupoAct extends ActionSupport implements SessionAware {
private Usuario usaurio;
private List<Regras> regras;
private Map<String, Object> session;
private Grupo grupo = new Grupo();
private List<Grupo> colGrupos;
private String regrasTexto = "";
@SkipValidation
@Action(value = "FrmGrupos", results = { @Result(name = "ok", location = "/WEB-INF/jsp/telas/FrmGrupos.jsp") })
public String editaPermissoes() {
ApplicationContext apx = WebApplicationContextUtils
.getWebApplicationContext(ServletActionContext
.getServletContext());
GrupoDAO grupoDao = (GrupoDAO) apx.getBean("GrupoDAO");
Usuario usuario = (Usuario) session.get(Sessao.usuarioLogado);
regras = Arrays.asList(Regras.values());
colGrupos = grupoDao.getColByDono(usuario, usuario);
return "ok";
}
@SkipValidation
@Action(value = "NovoGrupo", results = { @Result(name = "novo", location = "/WEB-INF/jsp/telas/FrmGruposEditar.jsp") })
public String novoGrupo() {
grupo = new Grupo();
regras = Arrays.asList(Regras.values());
return "novo";
}
@SkipValidation
@Action(value = "EditaGrupo", results = { @Result(name = "editar", location = "/WEB-INF/jsp/telas/FrmGruposEditar.jsp") })
public String editaGrupo() {
grupo = (Grupo) session.get(Sessao.grupo);
regras = Arrays.asList(Regras.values());
return "editar";
}
@Action(value = "SalvarGrupo", results = {
@Result(name = "ok", type = "redirectAction", params = {
"actionName", "FrmGrupos" }),
@Result(name = "input", type = "redirectAction", params = {
"actionName", "EditaGrupo" }) })
public String salvarGrupo() throws Exception {
ApplicationContext apx = WebApplicationContextUtils
.getWebApplicationContext(ServletActionContext
.getServletContext());
ServiceDao<Grupo> service = (GrupoDAO) apx.getBean("GrupoDAO");
grupo.setUsuarioDono((Usuario) session.get(Sessao.usuarioLogado));
grupo.setRegras(getRegras(regrasTexto));
if (grupo.getRegras() == null) {
System.out.println("ERRROROOO com grupos nulos");
} else if (service.salvar(grupo,
(Usuario) session.get(Sessao.usuarioLogado))) {
session.put(Sessao.grupoRegras, null);
return "ok";
} else {
System.out.println("ERRROROOO");
}
return null;
}
public List<Regras> getRegras(String regras) {
List<Regras> col = new ArrayList<Regras>();
for (String r : regras.split("x")) {
col.add(Regras.getRegras(Integer.valueOf(r)));
}
return col;
}
public List<Regras> getRegras() {
return regras;
}
public void setRegras(List<Regras> regras) {
this.regras = regras;
}
public Usuario getUsaurio() {
return usaurio;
}
public void setUsaurio(Usuario usaurio) {
this.usaurio = usaurio;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public Grupo getGrupo() {
return grupo;
}
@VisitorFieldValidator(key = "grupo")
public void setGrupo(Grupo grupo) {
this.grupo = grupo;
}
public List<Grupo> getColGrupos() {
return colGrupos;
}
public void setColGrupos(List<Grupo> colGrupos) {
this.colGrupos = colGrupos;
}
public String getRegrasTexto() {
return regrasTexto;
}
public void setRegrasTexto(String regrasTexto) {
this.regrasTexto = regrasTexto;
}
public void validate() {
if (getRegrasTexto().isEmpty()) {
super.addFieldError("regrasTexto",
"Tem de ser escolhido pelo menos um nível de permissão");
}
if (((getRegrasTexto().contains(""
+ Regras.ADMINISTRADOR_AUTONOMO.getCodigo())))
&& (getRegrasTexto().contains("x"))) {
super.addFieldError(
"regrasTexto",
"Quando for escolhido o administrador autonômo, não pode ser escolhido nem um outro!!!");
}
session.put(Sessao.grupo, grupo);
}
}
Eu preciso realizar umas validações nele. O código realiza a validação certinho, o problema é que quando ele dá o retorno (a página que é enviada com o result “input” na action “SalvarGrupo”) ele não mantém o objeto “grupo”. Em outras palavras eu estou enviando um objeto “Grupo” para o struts validar, quando ele realiza a validação e o objeto não passa, ele encaminha novamente para a página de correção só que nenhum campo é preenchido, o usuário tem de preencher todos os campos novamente e é isto que eu estou querendo evitar.
A minha jsp é recebida via ajax (jquery), não sei se isso interfere e é esta aki:
<%@page import="jubernate.constantes.Sessao"%>
<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!-- Importação dos css -->
<c:import url="/WEB-INF/jsp/divs/cabecalhos.jsp" />
<div>
<!-- barra de navegação -->
<div id="navegacao" class="navegacao fonte-100">
<a href="MenuPrincipal"><fmt:message key="principal.navegacao" />
</a> -> <a href="gerGrupos"><fmt:message
key="frmgrupos.consulta_grupo" /></a> ->
<fmt:message key="frmgrupo_editar.barra_navegacao" />
</div>
<!-- título -->
<div>
<h1>
<fmt:message key="frmgrupo_editar.titulo" />
</h1>
</div>
<div>
<form id="grupoSalvar" method="POST" action="SalvarGrupo" >
<!-- -->
<fieldset>
<legend class="fonte-120">
<b><fmt:message key="frmgrupo_editar.titulo_formulario" /></b>
</legend>
<input type="hidden" name="grupo.codigo" id="grupo.codigo" value="${grupo.codigo}"/>
<label for="grupo.nome" class="fonte-100"><fmt:message
key="frmgrupo_editar.nome" /> </label> <input type="text" id="grupo.nome"
name="grupo.nome" /><br /> <label for="grupo.observacoes"
class="fonte-100"><fmt:message
key="frmgrupo_editar.observacoes" /></label><br />
<textarea rows="5" cols="50" id="grupo.observacoes"
name="grupo.observacoes" ></textarea>
</br>
<!-- <div style="position:relative;"> -->
<label for="regras" class="fonte-100"><fmt:message
key="frmgrupo_editar.permissoes" /></label> <select id="cbRegras"
class="fonte-80">
<c:forEach items="${regras}" var="reg">
<option value="${reg.codigo}">${reg.nome }</option>
</c:forEach>
</select>
<!-- </div> -->
<button name="bAddPermissao" id="bAddPermissao"
onclick="addPermissao()" class="fonte-80" type="button">+</button>
<button name="bRemovePermissao" id="bRemovePermissao"
onclick="removePermissao()" class="fonte-80" type="button">-</button>
<br />
<table id="tbGrupoPermissoes">
<thead>
<tr>
<td><fmt:message key="frmgrupo_editar.tbl_permissao_grupo" /></td>
</tr>
</thead>
<c:forEach items="${grupo.regras}" var="reg" varStatus="status">
<tr id="grupo.regras[${status.index} }]">
<td>${status.index} - ${reg.nome}</td>
</tr>
</c:forEach>
</table>
<input type="hidden" name="regrasTexto" id="regrasTexto" value=""/>
</fieldset>
<div id = "jaTemPermissao" title=<fmt:message key="frmgrupo_mensagem.permissao_ja_existe_titulo" /> >
<p><fmt:message key="frmgrupo_mensagem.permissao_ja_existe" /></p>
</div>
<div id = "relPermVazia" title=<fmt:message key="frmgrupo_mensagem.permissao_rel_vazia_titulo" /> >
<p><fmt:message key="frmgrupo_mensagem.permissao_rel_vazia" /></p>
</div>
<div id="frmGrupos_botoes">
<button id="bSalvarGrupo" type="submit">
<fmt:message key="frmgrupo_editar.salvar" />
</button>
<button id="bCancelarGrupo" type="button"
onclick="redirecionaGrupos()">
<fmt:message key="frmgrupo_editar.cancelar" />
</button>
</div>
</form>
<!-- JS - JavaScript -->
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jscript.js"></script>
</div>
</div>
Agradeço a todos que puderem dar uma olhada.
Vlw