WW2+Validation

7 respostas
kartler

O Retorno da Stack II direção kartler - esse é o link.

deixando as palhaçadas de lado o negócio é sério....são 02:59 da manhã aqui em Fortaleza e EU ESTOU BRIGANDO mais uma vez com o WW2.

Galera tem um esquema de validação automática no WW2 correto... que criamos um MinhaAction-validation.xml só que comigo não funciona :oops: "eu digo a mim mesmo o erro está no meu código".... veja se alguém do pessoal pode me ajudar... vou começar pelo xwork.xml

<!--cortando algumas partes e deixando as mais importantes-->
	<package name="default" extends="webwork-default">

		<interceptors>
			<interceptor-stack name="defaultComponentStack">
				<interceptor-ref name="component" />
				<interceptor-ref name="defaultStack" />
				<interceptor-ref name="validationWorkflowStack" />
			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="defaultStack" />

<!--Minha áctión-->
		<action class="br.com.kartler.actions.valida" name="valida">
			<interceptor-ref name="validationWorkflowStack" />
			<result name="success" type="velocity">sucesso.vm</result>
			<result name="input" type="dispatcher">cad.jsp</result>
			<result name="error" type="dispatcher">cad.jsp</result>
		</action>

[code]

e vamos agora a minha cad.jsp

[code]
<!--omitindo código super secreto-->
    <ww:form name="'formcad'" method="'post'" action="'valida'">
    	<ww:textfield name="'nome'" label="'nome'" required="true"/>
    	<ww:textfield name="'email'" label="'email'" required="true"/>
    	<ww:submit name="'OK'" value="'OK'"/>
    </ww:form>

minha ActionCadContato-validation.xml

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
	<field name="nome">
		<field-validator type="requiredstring">
			<message>Campo  Obrigatório</message>
		</field-validator>
	</field>
	<field name="email">
		<field-validator type="requiredstring">
			<message>Campo  Obrigatório</message>
		</field-validator>
	</field>
</validators>

minha ActionCadContato

<!--omitindo código-->    
public String execute() throws SQLException {
   
        persiste prs = new persiste();
        prs.newsletter(model);
        return SUCCESS;

    }

obs:Essa minha action implementa ModelDriven.

quando deixo os campos vazios ele não valida , vai direto pra SUCCESS independente dos campos nome e email estarem vazios ou não.
o que eu estou fazendo de errado que o validation não está funcionado?

ou não entendi ainda a lógica do validation??? ....porque pra mim é assim o validation elimina de vc ter de colocar em tua action addFieldErr(bla bla bla) quer dizer em minha concepção é pra ela ser uma coisa automatica que já valida os campos que eu colocar em MinhaAction-validation.xml.

Obs:O ERRO é Não está validando :)

Desde já deixo meus agradecimentos ao pessoal.

03:14 EM Fortaleza Clima propicio para banho de mar ... que pena estou a 15 minutos da praia e não tenho carro bem que minha mãe me mandou estudar.

7 Respostas

Jair_Rillo_Junior

não analisei bem o código, mas vai algumas dicas.

Você disse que está utilizando o Model-Driven, mas cade o interceptor dele na sua Stack?
Outra coisa… ranca o defaultStack e poe model-driven lá, pode ser que o defaultStack esteja “parando a executação” do validationWorkflowStack.

E por último, pega o exemplo do Smota aqui do GUJ que tem uma validação lá que funciona legal (a parte de JavaScript não tem, mas é super simples implementá-la).

maresp

Bem, vamos por partes…
Vc disse que sua action implementa model-driven porém vc não está utilizando o interceptor ‘model-driven’ na sua stack. Outro detalhe são os interceptors que vc colocou na sua stack. Vc utilizou component, defaultStack e validationWorkflowStack. Sugiro a vc dar uma olhada no xwork-default.xml e na função dos interceptors. Analisando o xwork-default.xml vc vai perceber que validationWorkflowStack é uma pilha que contém inclusive a referência para o interceptor workflow, que é responsável por chamar o método validate() antes do método execute(). Considere o uso somente de validation invés de validationWorkflowStack. Depois vc pode adicionar um loop para percorrer os fieldErrors na sua cad.jsp.
t+

smota

A galera resolveu ... seu problema está na lida com os interceptors, mas ora facilitar:

<interceptors>
			<interceptor-stack name="defaultComponentStack">
				<interceptor-ref name="component" />
				<interceptor-ref name="model-driven" />
				<interceptor-ref name="validationWorkflowStack"/>
			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="defaultComponentStack" />

<!--Minha áctión-->
		<action class="br.com.kartler.actions.valida" name="valida">
			<result name="success" type="velocity">sucesso.vm</result>
			<result name="input" type="dispatcher">cad.jsp</result>
			<result name="error" type="dispatcher">cad.jsp</result>
		</action>

Acho que isso funfa ...

_fs

Desculpe desviar do assunto, mas eu não entendi a utilidade desse ModelDriven.

Se a minha action possui esse getter

public Pessoa getPessoa(){ return pessoa; }

Eu faço isso normalmente com velocity

< p>$pessoa.nome - $pessoa.idade< /p>

Sem precisar implementar nada.

Estou esquecendo de alguma coisa??

smota

A utilidade é você nao precisar definir na view qual é o model que sua action usa :roll:

Ou seja, a view nao precisa saber que a propriedade nome é de uma pessoa (pessoa.nome) e nao de um cachorro (cachorro.nome) …

pra falar a verdade eu usei muito no inicio, hoje prefiro sem model pq ganho flexibilidade pra mixar modelos e separar propriedades de controle que ficam somente na action e nao no modelo de uma forma muito mais transparente pra desenvolver e dar manutencao :shock:

kartler

Mesmo seguindo os passos indicados não Funfou :cry:

_fs

Smota, mas então não basta fazer um public Object getModel() e pronto? :smiley:

Mas utilizando dessa facilidade fiz uma cagadas muito feias no meu código … “olha que facinho, olha que facinho! … ah não, mudar o nome do método no objeto não!” :expressionless:

hehe

Desculpe novamente por desviar do assunto :expressionless:

Criado 2 de dezembro de 2004
Ultima resposta 3 de dez. de 2004
Respostas 7
Participantes 5