Ola, estou estydando e tentei fazer um validador em struts, botei o plugin no struts-config.xml, configurei o validator-rules.xml e o validation.xml, defini na minha action o atributo validate=“true” e mesmo assim qdo submeto meu form ele não passa no validador, o campo continua aceitando qualquer valor.
Abaixo o codigo do plugin:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
da action:
<action name="alunoForm" path="/inserirAluno"
parameter="dscAcao" scope="session" type="Actions.AlunoActions"
input="/Inserir_Aluno.jsp" validate="true">
<forward name="sucesso" path="/Principal.jsp" />
<forward name="falha" path="/Inserir_Falha.jsp" />
</action>
da validator-rules.xml:
<form-validation>
<global>
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">
<javascript><![CDATA[
function validateRequired(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
var formName = form.getAttributeNode("name");
oRequired = eval('new ' + formName.value + '_required()');
for (x in oRequired) {
var field = form[oRequired[x][0]];
if ((field.type == 'hidden' ||
field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'file' ||
field.type == 'checkbox' ||
field.type == 'select-one' ||
field.type == 'password') &&
field.disabled == false) {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else if (field.type == 'checkbox') {
if (field.checked) {
value = field.value;
}
} else {
value = field.value;
}
if (trim(value).length == 0) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRequired[x][1];
isValid = false;
}
} else if (field.type == "select-multiple") {
var numOptions = field.options.length;
lastSelected=-1;
for(loop=numOptions-1;loop>=0;loop--) {
if(field.options[loop].selected) {
lastSelected = loop;
value = field.options[loop].value;
break;
}
}
if(lastSelected < 0 || trim(value).length == 0) {
if(i == 0) {
focusField = field;
}
fields[i++] = oRequired[x][1];
isValid=false;
}
} else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
isChecked=-1;
for (loop=0;loop < field.length;loop++) {
if (field[loop].checked) {
isChecked=loop;
break; // only one needs to be checked
}
}
if (isChecked < 0) {
if (i == 0) {
focusField = field[0];
}
fields[i++] = oRequired[x][1];
isValid=false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}
// Trim whitespace from left and right sides of s.
function trim(s) {
return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}
]]>
</javascript>
</validator>
<validator name="mask"
classname="org.apache.struts.validator.FieldChecks"
method="validateMask"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.invalid">
<javascript><![CDATA[
function validateMask(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMasked = new mask();
for (x in oMasked) {
var field = form[oMasked[x][0]];
if ((field.type == 'text' ||
field.type == 'textarea') &&
(field.value.length > 0)) {
if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
if (i == 0) {
focusField = field;
}
fields[i++] = oMasked[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}
function matchPattern(value, mask) {
return mask.exec(value);
}]]>
</javascript>
</validator>
</global>
</form-validation>
do validation.xml:
<form-validation>
<formset>
<form name="alunoForm">
<field property="nome_novo" depends="required, mask">
<arg0 key="logon.nome" resource="false"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9]*$</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
meu form:
<form-beans>
<form-bean name="alunoForm"
type="org.apache.struts.validator.DynaValidatorActionForm"
dynamic="true">
<form-property name="selectedItems"
type="java.lang.String[]" />
<form-property name="dscAcao" type="java.lang.String" />
<form-property name="nome" type="java.lang.String" />
<form-property name="nome_novo" type="java.lang.String" />
<form-property name="telefone" type="java.lang.String" />
<form-property name="endereco" type="java.lang.String" />
<form-property name="fase" type="java.lang.String" />
<form-property name="periodo" type="java.lang.String" />
</form-bean>
</form-beans>
Se alguém souber se está faltando declarar mais alguma coisa ou puder me ajudar eu agradeço. Obrigado!