Olá!!
Na minha tela de login eu consigo fazer a validação normalmente!
mas dentro da área do usuário, tem a área de cadastro de alunos.
A pessoa clica em cadastrar Alunos, e o formulário que está em outra página é carregado para a tag sx:div que está na área do usuário.
O problema é que ao tentar salvar com os campos errados, pra testar a validação, as mensagens de validação não aparecem.
o nome do xml com as validações está igual ao nome do action que eu chamo.
Por que isso está acontecendo?
tela da área do usuário: main.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link href="css/posicionamento.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<sx:head/>
<script type="text/javascript">
function showSubMenu(menu) {
document.getElementById(menu).style.visibility = 'visible';
}
function hideSubMenu() {
document.getElementById('subMenu1').style.visibility = 'hidden';
}
</script>
</head>
<body>
<div id="logout">
<s:url id="sair" action="sair">
<s:param name="sair">sair</s:param>
</s:url>
<s:a href="%{sair}"><s:text name="mainArea.logout" /></s:a><br />
</div>
<s:if test="%{'language.chose'} == Português">
<s:property value="pessoa.idtipo.nome" />
</s:if>
<s:elseif test="%{'language.chose'} == English">
<s:property value="pessoa.idtipo.name" />
</s:elseif>
<hr id="linha" noshade="noshade" onmouseover="hideSubMenu()" />
<div id="menu" style="background-image: url('images/fundo_menu.png');
background-repeat: repeat;">
<table border="0">
<tr>
<td width="100px">
<sx:a cssClass="link_menu" href="#" onmouseover="showSubMenu('subMenu1')">
<s:property value="%{getText('menu.1')}" />
</sx:a>
</td>
<td width="100px">
<sx:a cssClass="link_menu" href="#" onmouseover="showSubMenu('subMenu2')">
<s:property value="%{getText('menu.2')}" />
</sx:a>
</td>
<td width="100px">
<sx:a cssClass="link_menu" href="#" onmouseover="showSubMenu('subMenu3')">
<s:property value="%{getText('menu.3')}" />
</sx:a>
</td>
</tr>
</table>
</div>
<div id="subMenu1" style="background-image: url('images/fundo_menu.png');
background-repeat: repeat;">
<table border="0">
<tr>
<td>
<s:url id="cadastrarAluno" action="telaCadastrarAluno" />
<sx:a cssClass="link_menu" href="%{cadastrarAluno}" targets="conteudo" onclick="hideSubMenu()">
<s:property value="%{getText('menu.1.1')}" />
</sx:a>
</td>
</tr>
<tr>
<td>
<s:url id="pesquisarAluno" action="pesquisarAluno" />
<sx:a cssClass="link_menu" href="%{pesquisarAluno}" targets="conteudo" onmouseout="hideSubMenu()">
<s:property value="%{getText('menu.1.2')}" />
</sx:a>
</td>
</tr>
</table>
</div>
<div id="pesquisar" style="border-color: navy; border: thin;">
<s:form id="pesquisa">
<s:property value="getText('textfield.submit')"/>
<s:radio name="opcao" list="pesquisa" key="comboBox.by"/>
<s:textfield name="expressao" size="30" key="textField.name" />
<sx:submit formId="pesquisa" key="textfield.execute" />
</s:form>
</div>
<s:div id="conteudo" /> <!-- Aqui que será carregado o formulário -->
</body>
</html>
cadastro que será incluso: cadastrarAluno.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<s:form id="cadastrarAluno" action="cadastrarAluno" validate="true">
<s:textfield key="label.user" name="pessoa.usuario" required="true" maxlength="20" size="20" />
<s:password key="label.password" name="pessoa.senha" required="true" maxlength="20" size="20" />
<s:password key="label.confirmPassword" name="pessoa.senha" required="true" maxlength="20" size="20" />
<s:textfield key="label.bornDate" name="pessoa.nascimento" required="true" />
<s:textfield key="label.email" name="pessoa.email" maxlength="40" size="40" />
<sx:submit formId="cadastrarAluno" key="button.save" align="right" />
</s:form>
<s:actionerror cssStyle="color:red" />
<sx:a cssClass="linkNextButton" href="cadastroAlunoPasso2" targets="conteudo"><img class="imageNextButton" src="images/arrowRight.png" /></sx:a>
CadastroAlunoAction-validation.xml
<!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="pessoa.nascimento">
<field-validator type="required">
<message>%{getText('validation.required')}</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">10</param>
<param name="trim">true</param>
<message>%{getText('login.error.txtFieldUser.maxCaracter')}</message>
</field-validator>
<field-validator type="date">
<message>%{getText('validation.date')}</message>
</field-validator>
</field>
<field name="pessoa.email">
<field-validator type="email">
<message>%{getText('validation.email')}</message>
</field-validator>
</field>
</validators>
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.custom.i18n.resources" value="language" />
<package name="default" extends="struts-default">
<!-- criando uma pilha de interceptadores que é pilha "defaultStack" + o interceptador que criamos -->
<interceptors>
<interceptor name="authorizationInterceptor" class="br.com.esporte.interceptadores.AuthorizationInterceptor" />
<interceptor name="locale" class="br.com.esporte.interceptadores.LocaleInterceptor" />
<interceptor-stack name="gujStack">
<interceptor-ref name="locale"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="gujStack"/>
<!-- <default-action-ref name="main" />-->
<action name="main">
<result>pages/main.jsp</result>
</action>
<action name="changeLanguage">
<result>index.jsp</result>
</action>
<action name="sair" method="sair" class="br.com.esporte.action.SecurityAction">
<interceptor-ref name="authorizationInterceptor" />
<result type="redirectAction">main</result>
</action>
<action name="logar" method="logar" class="br.com.esporte.action.SecurityAction">
<result name="adm" type="chain">adm</result>
<result name="prf" type="chain">prf</result>
<result name="aln" type="chain">aln</result>
<result name="input">pages/main.jsp</result>
<result name="error">pages/main.jsp</result>
</action>
<action name="adm">
<interceptor-ref name="authorizationInterceptor" />
<result>safeArea/adm/main.jsp</result>
<result name="input">pages/main.jsp</result>
</action>
<action name="telaCadastrarAluno">
<interceptor-ref name="authorizationInterceptor" />
<result>safeArea/cadastrarAluno.jsp</result>
<result name="input">pages/main.jsp</result>
</action>
<action name="cadastrarAluno" method="cadastrarAluno" class="br.com.esporte.action.CadastroAlunoAction">
<interceptor-ref name="authorizationInterceptor" />
<result>safeArea/cadastrarAluno.jsp</result>
<result name="input">safeArea/adm/main.jsp</result>
</action>
<action name="prf">
<interceptor-ref name="authorizationInterceptor" />
<result>safeArea/prf/main.jsp</result>
<result name="input">pages/main.jsp</result>
</action>
<action name="aln">
<interceptor-ref name="authorizationInterceptor" />
<result>safeArea/aln/main.jsp</result>
<result name="input">pages/main.jsp</result>
</action>
</package>
</struts>