olá pessoal…
eu sei que existe diversos materiais de struts na net q explica sobre validação…
mais estou com muita dificuldade em entender toda aquela configuração maluca…
e tbm nao tenho opçao para escolher outro framework… pois o sistema aqui na empresa foi desenvolvido com ele…
bom vou postar meu código aqui… se alguem puder me ajudar ficaria muito grato…
1º - Meu JSP
É uma lista de telefones, assim que o usuario clicar no botão alterar sera necessario fazer determinadas validações antes que seja realizado o update…
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<html:html locale="true">
<head>
<title></title>
<link href="../includes/css.css" rev="stylesheet" rel="stylesheet">
<script>
function update(id) {
form = document.forms[0];
form.action = 'updateTelefones.do';
form.cpf.value = eval('form.cpf'+id+'.value');
form.nome.value = eval('form.nome'+id+'.value');
form.ddd_res.value = eval('form.ddd_res'+id+'.value');
form.fone_res.value = eval('form.fone_res'+id+'.value');
form.ddd_cel.value = eval('form.ddd_cel'+id+'.value');
form.fone_cel.value = eval('form.fone_cel'+id+'.value');
form.ddd_com.value = eval('form.ddd_com'+id+'.value');
form.fone_com.value = eval('form.fone_com'+id+'.value');
form.ddd_outro.value = eval('form.ddd_outro'+id+'.value');
form.fone_outro.value = eval('form.fone_outro'+id+'.value');
form.submit();
}
</script>
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<table width="100%" cellpadding="4" cellspacing="1" border="0">
<c:choose>
<c:when test="${empty phonesList}">
<tr class="cor1">
<td align="left" colspan="10">Nenhum telefone encontrado.</td>
</tr>
</c:when>
<c:otherwise>
<html:form action="/updateTelefones" method="POST">
<html:hidden property="cpf"/>
<html:hidden property="nome"/>
<html:hidden property="ddd_res"/>
<html:hidden property="fone_res"/>
<html:hidden property="ddd_cel"/>
<html:hidden property="fone_cel"/>
<html:hidden property="ddd_com"/>
<html:hidden property="fone_com"/>
<html:hidden property="ddd_outro"/>
<html:hidden property="fone_outro"/>
<!-- Repetição -->
<c:forEach var="phones" items="${phonesList}" varStatus="loop">
<c:set var="line" value="${(loop.count)}"/>
<tr class="cor<c:out value="${(loop.count%2)+1}"/>">
<td align="center">
<c:out value="${phones.cpf}"/>
<input type="hidden" name="cpf<c:out value="${line}"/>" value="<c:out value="${phones.cpf}"/>">
</td>
<td><img src="../images/ico16_cliente.gif" alt="" width="16" height="16" border="0"><c:out value="${line}"/></td>
<td>
<c:out value="${phones.nome}"/>
<input type="hidden" name="nome<c:out value="${line}"/>" value="<c:out value="${phones.nome}"/>">
</td>
<td class="NoPad" align="center">
<input type="Text" class="txt" maxlength="2" name="ddd_res<c:out value="${line}"/>" value="<c:out value="${phones.ddd_res}"/>" style="width:20px; text-align:center;"/>
<input type="Text" class="txt" maxlength="8" name="fone_res<c:out value="${line}"/>" value="<c:out value="${phones.fone_res}"/>" style="width:60px; text-align:center;"/>
</td>
<td class="NoPad" align="center">
<input type="Text" class="txt" maxlength="2" name="ddd_cel<c:out value="${line}"/>" value="<c:out value="${phones.ddd_cel}"/>" style="width:20px; text-align:center;"/>
<input type="Text" class="txt" maxlength="8" name="fone_cel<c:out value="${line}"/>" value="<c:out value="${phones.fone_cel}"/>" style="width:60px; text-align:center;"/>
</td>
<td class="NoPad" align="center">
<input type="Text" class="txt" maxlength="2" name="ddd_com<c:out value="${line}"/>" value="<c:out value="${phones.ddd_com}"/>" style="width:20px; text-align:center;"/>
<input type="Text" class="txt" maxlength="8" name="fone_com<c:out value="${line}"/>" value="<c:out value="${phones.fone_com}"/>" style="width:60px; text-align:center;"/>
</td>
<td class="NoPad" align="center">
<input type="Text" class="txt" maxlength="2" name="ddd_outro<c:out value="${line}"/>" value="<c:out value="${phones.ddd_outro}"/>" style="width:20px; text-align:center;"/>
<input type="Text" class="txt" maxlength="8" name="fone_outro<c:out value="${line}"/>" value="<c:out value="${phones.fone_outro}"/>" style="width:60px; text-align:center;"/>
</td>
<td align="center">
<input type="button" title="Alterar" class="BtPadrao" value="" style="width:22; background-image:url('../images/ico16_ok.gif');" onclick="javascript:update('<c:out value="${line}"/>')">
</td>
</tr>
</c:forEach>
</html:form>
</c:otherwise>
</c:choose>
<!-- Repetição -->
<tr class="cinza">
<td width="100"></td>
<td width="16"></td>
<td></td>
<td width="90"></td>
<td width="90"></td>
<td width="90"></td>
<td width="90"></td>
<td width="22"></td>
</tr>
</table>
</body>
</html:html>
2º Meu Arquivo validation.xml
A principio estou tentando fazer com que seja necessario preencher todos os campos de telefones e com tamanho minimo do ddd de 2 caracteres e fone com 8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="updateTelefonesForm">
<field property="ddd_res" depends="required, minlength">
<arg0 key="ddd"/>
<var>
<var-name>minlenght</var-name>
<var-value>2</var-value>
</var>
</field>
<field property="fone_res" depends="required, minlength">
<arg0 key="fone"/>
<var>
<var-name>minlenght</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="ddd_cel" depends="required, minlength">
<arg0 key="ddd"/>
<var>
<var-name>minlenght</var-name>
<var-value>2</var-value>
</var>
</field>
<field property="fone_cel" depends="required, minlength">
<arg0 key="fone"/>
<var>
<var-name>minlenght</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="ddd_com" depends="required, minlength">
<arg0 key="ddd"/>
<var>
<var-name>minlenght</var-name>
<var-value>2</var-value>
</var>
</field>
<field property="fone_com" depends="required, minlength">
<arg0 key="fone"/>
<var>
<var-name>minlenght</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="ddd_outro" depends="required, minlength">
<arg0 key="ddd"/>
<var>
<var-name>minlenght</var-name>
<var-value>2</var-value>
</var>
</field>
<field property="fone_outro" depends="required, minlength">
<arg0 key="fone"/>
<var>
<var-name>minlenght</var-name>
<var-value>8</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
3º Arquivo struts-config.xml
...
<form-bean name="updateTelefonesForm" type="org.apache.struts.validator.DynaValidatorForm">
<description>Form com dados update de Telefones</description>
<form-property name="cpf" type="java.lang.String"/>
<form-property name="nome" type="java.lang.String"/>
<form-property name="ddd_res" type="java.lang.String"/>
<form-property name="fone_res" type="java.lang.String"/>
<form-property name="ddd_cel" type="java.lang.String"/>
<form-property name="fone_cel" type="java.lang.String"/>
<form-property name="ddd_com" type="java.lang.String"/>
<form-property name="fone_com" type="java.lang.String"/>
<form-property name="ddd_outro" type="java.lang.String"/>
<form-property name="fone_outro" type="java.lang.String"/>
</form-bean>
...
<action path="/updateTelefones"
type="br.com.cmsoftware.collection.web.actions.gestao.ManutTelefonesAction"
parameter="update"
name="updateTelefonesForm"
scope="request"
validate="true"
input="/erroTelefone.jsp">
<forward name="failure" path="/erroTelefone.jsp" redirect="true"/>
<forward name="ok" path="/manutencaoTelefones.list.jsp" redirect="true"/>
</action>
...
4º Meu JSP erro
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<html:html locale="true">
<head>
<title></title>
<html:base/>
</head>
<body bgcolor="white">
<font face="Comic Sans MS" size="3">
<logic:messagesPresent>
<ul>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</ul>
</logic:messagesPresent>
<br/>
</font>
</body>
</html:html>
esta acontecendo que quando eu deixo todos os campos em branco… a mensagem aparece de boa…
agora quando deixo um ou outro campo sem preencher apresenta a seguinte mensagem…
{0}O campo DDD Não pode ser menor que null caracteres
{0}O campo Fone Não pode ser menor que null caracteres
{0}O campo DDD Não pode ser menor que null caracteres
{0}O campo Fone Não pode ser menor que null caracteres
{0}O campo DDD Não pode ser menor que null caracteres
{0}O campo Fone Não pode ser menor que null caracteres
{0}O campo DDD Não pode ser menor que null caracteres
{0}O campo Fone Não pode ser menor que null caracteres
outro problema eh quando tento digitar todos os digitos com zero…
na minha classe VO eu tentei implementar o metodo validate…
[code]
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
//o super.validate chama validações do validation.xml
ActionErrors errors = new ActionErrors();
//se nao cair no validation.xml vai executar aqui
if (ddd_res == null || ddd_res.equals("00") || ddd_res.length() < 2 )
{
errors.add("ddd_res", new ActionError("error.ddd"));
}
if (fone_res == null || fone_res.equals("00000000") || fone_res.length() < 8 )
{
errors.add("fone_res", new ActionError("error.fone"));
}
if (ddd_cel == null || ddd_cel.equals("00") || ddd_cel.length() < 2 )
{
errors.add("ddd_cel", new ActionError("error.ddd"));
}
if (fone_cel == null || fone_cel.equals("00000000") || fone_cel.length() < 8 )
{
errors.add("fone_cel", new ActionError("error.fone"));
}
if (ddd_com == null || ddd_com.equals("00") || ddd_com.length() < 2 )
{
errors.add("ddd_com", new ActionError("error.ddd"));
}
if (fone_com == null || fone_com.equals("00000000") || fone_com.length() < 8 )
{
errors.add("fone_com", new ActionError("error.fone"));
}
if (ddd_outro == null || ddd_outro.equals("00") || ddd_outro.length() < 2 )
{
errors.add("ddd_outro", new ActionError("error.ddd"));
}
if (fone_outro == null || fone_outro.equals("00000000") || fone_outro.length() < 8 )
{
errors.add("fone_outro", new ActionError("error.fone"));
}
//returna os erros para a pagina de "input" cadastrada no struts-config.xml
return errors;
}[/code]
Minha action…
public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ActionMessages errors = new ActionMessages();
try {
CompanyVo company = SessionUtils.getUser(request);
if (null == company) {
throw new BusinessException("Sessão inválida. Efetue o login novamente");
}
PhonesVo phones = new PhonesVo();
BeanUtils.copyProperties(phones, form);
phones.setIdEmpresa(company.getId());
//List phonesList = (List) request.getSession().getAttribute("phonesList");
if (errors.isEmpty()) {
int updatePhones = new Phones().getUpdate(phones);
List phonesList = new Phones().getPhones(company.getId());
request.setAttribute("phonesList", phonesList);
}
} catch (BusinessException e) {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.msg", e.getMessage()));
} catch (Exception e) {
log.error(null, e);
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.msg", "Problemas ao atualizar os telefones."));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (mapping.findForward("failure"));
}
return (mapping.findForward("ok"));
}
quando digito tudo zero o que a mensagem que apresente eh a seguinte
O campo DDD Não pode ser menor que null caracteres
O campo Fone Não pode ser menor que null caracteres
O campo DDD Não pode ser menor que null caracteres
O campo Fone Não pode ser menor que null caracteres
O campo DDD Não pode ser menor que null caracteres
O campo Fone Não pode ser menor que null caracteres
O campo DDD Não pode ser menor que null caracteres
O campo Fone Não pode ser menor que null caracteres
isso acontece tbm quando digito somente em um campo digitos “0”…