Bom estou fazendo a verificação de erro do meu cadastro utilizando ActionMessages, mais tem uma problema quando eu adiciono uma messages com o messages.add(“nome”, new ActionMessage(“projetoFinal.struts.erro.nome”)) ela não adiciona, ou melhor dizendo sobrescreve a mensagem anterior que seria a do ID, messages.add(“id”, new ActionMessage(“projetoFinal.struts.erro.id”)), já mexi em tudo aqui mais não resolveu alguém poderia dar uma luz ???
Segue o codigo abaixo:
metodo prepareCreate que seta a operação a ser executa no Action, atraves de um campo hidden no form
public ActionForward prepareCreate(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// especializa o objeto
ProjectForm projectForm = (ProjectForm) form;
// seta a operação
projectForm.setOperation("create");
return (mapping.findForward("prepareCreate"));
}
metodo create que verifica se existe mensagens
public ActionForward create(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws SQLException, ParseException {
// objeto dao
ProjectDAO projectDAO = new ProjectDAO();
// objeto que recebe os dados vindo do actionForm
ProjectTO projectTO = new ProjectTO();
// especializa o objeto
ProjectForm projectForm = (ProjectForm) form;
// cria um objeto de menssagem
ActionMessages messages = new ActionMessages();
// chama o metodo que verifica os dados inseridos no form
parseTO(projectTO, projectForm, messages);
// verifica se o messages está vazio
if (messages.size() > 0) {
// se entrar aqui significa que alguma mensagem está gravado nele
// então logo algum erro aconteceu
saveMessages(request, messages);
return (mapping.findForward("prepareCreate"));
} else {
// caso contrario o registro está pronto para ser gravado
projectDAO.create(projectTO);
// atualiza a lista e a exibe
return (mapping.findForward("refreshFindAll"));
}
metodo parseTO que verifica se existe erros no form, caso exista ele retorna no jsp com a mensagens e exibe mais ai que está acontecendo o problema, ele sobrescreve as mensagem por exemplo só exibe o erro do id em todos os campos ou o nome em todos os campos. O atributo count do messages sempre fica em 1 no debug, alguém saberia me dizer o que está acontecendo ??
/**
* Metodo que checa se os dados vindo de um form são validos caso sejam, ele
* vai sendo armazenado em um projetoTO para depois ser gravado
*/
public void parseTO(ProjectTO projectTO, ProjectForm form,
ActionMessages messages) {
// checa se o id é valido
if (form.getId() != null && form.getId() != "") {
// tenta converter o numero do form para um integer
// se conseguir o id é valido caso contrario o id pode ser uma
// letra ou alguma caracter invalido
try {
projectTO.setId(Integer.parseInt(form.getId()));
} catch (NumberFormatException e) {
// adciona a mensagem de erro
messages.add("id", new ActionMessage(
"projetoFinal.gavazzi.erro.numero"));
}
} else {
// se entrar nesse else, o id está nulo ou em branco
messages.add("id",
new ActionMessage("projetoFinal.gavazzi.erro.id"));
}
// checa se o nome é valido
if (form.getNome() == null || form.getNome() == "") {
messages.add("nome", new ActionMessage(
"projetoFinal.gavazzi.erro.nome"));
} else {
// atribui o nome ao pjTO para ser gravado posteriormente
projectTO.setNome(form.getNome());
}
}
JSP do cadastro
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Titulo</title>
</head>
<body>
<table>
<html:form action="/ProjectAction">
<tr>
<td>
<bean:message key="cadup.id"/>
</td>
<td>
<html:hidden property="operation"/>
<html:text property="id"></html:text>
</td>
<td>
<logic:messagesPresent message="true" name="request" property="id">
<html:messages id="message" message="true"></html:messages>
<bean:write name="message"/>
</logic:messagesPresent>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.nome"/>
</td>
<td>
<html:text property="nome"></html:text>
</td>
<td>
<logic:messagesPresent message="true" name="request" property="nome">
<html:messages id="message" message="true"></html:messages>
<bean:write name="message"/>
</logic:messagesPresent>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.descricao"/>
</td>
<td>
<html:textarea property="descricao" cols="15" rows="3"></html:textarea>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.status"/>
</td>
<td>
<html:text property="status" ></html:text>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.prevInicio"/>
</td>
<td>
<html:text property="prevInicio" ></html:text>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.prevTermino"/>
</td>
<td>
<html:text property="prevTermino" ></html:text>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.inicio"/>
</td>
<td>
<html:text property="inicio" ></html:text>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.termino"/>
</td>
<td>
<html:text property="termino" ></html:text>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.prevHoras"/>
</td>
<td>
<html:text property="prevHoras"></html:text>
</td>
</tr>
<tr>
<td>
<bean:message key="cadup.horasEfetivas"/>
</td>
<td>
<html:text property="horasEfetivas" ></html:text>
</td>
</tr>
<tr>
<td colspan="2">
<html:submit><bean:message key="btn.enviar"/></html:submit>
<html:reset><bean:message key="btn.limpar"/> </html:reset>
</td>
</tr>
</html:form>
</table>
</body>
</html>
Se alguém puder me ajudar obrigado.