Melhor forma de realizar a divisão de tarefas nas actions do Struts

[quote=Maurício Linhares]Eu nunca vi nenhum erro no Validator…

Que erro é esse que ele está encontrando? Acontece o que com o form?

Eu só escrevo validação quando o validator não tem nenhuma opção, o que é raríssimo.[/quote]

Olá Maurício.

No caso ele gera o javaScript na página. O problema é quando o browser vai executar o código javaScript referente a validação required, dá erro na seguinte linha:

var formName = form.getAttributeNode(“name”);

Será que pode ser algum bug que já tenha sido corrigido? Qual versão do Struts você tá usando?

Outra coisa. Eu estou fazendo da forma que você indicou, criando uma mapeamento para cada método da minha action. Estou também fazendo o mapeamento das minhas validações no arquivo de configurações do Validator utilizando o path do mapeamento dos métodos da Action. Eu declarei neste arquivo o mapeamento do método inserirSalvo, para que a validação seja realizada quando esta action for executada. Só que eu gostaria de colocar também o mapeamento do método alterarSalvo, para que a mesma validação seja executada quando o usuário chamar esta action. Você saberia me informar como realizar esta configuração no validator? Assim, a validação seria executada no form quando somente um destes dois mapeamentos fosse executado.

Atualmente esotu usando somente um formBean para as duas páginas, pois não sei como fazer a action receber um formBean da página de manutenção de dados, e preencher e enviar outro formBean. Além do mais eu preciso armazenar os dados da pesquisa, pois no final da atualização dos dados deverei exibir novamente a tela de manutenção de dados, com a pesquisa realizada pelo usuário e devidamente atualizada.

Mas ele não está executando a validação “required” no JavaScript?

A versão que eu uso é a 1.2.7 e ela funciona normalmente, inclusive o Javascript.

Não entendi o problema das configurações dos mapeamentos, cada mapeamento pode ter um ActionForm diferente, você só precisa mudar o atributo “name” pra indicar qual é o ActionForm que ele deve utilizar.

Também não entendi nada da segunda. Se você precisa de 2 ActionForms diferentes, porque não usa os dois diferentes?

[quote=Maurício Linhares]Mas ele não está executando a validação “required” no JavaScript?

A versão que eu uso é a 1.2.7 e ela funciona normalmente, inclusive o Javascript.

Não entendi o problema das configurações dos mapeamentos, cada mapeamento pode ter um ActionForm diferente, você só precisa mudar o atributo “name” pra indicar qual é o ActionForm que ele deve utilizar.

Também não entendi nada da segunda. Se você precisa de 2 ActionForms diferentes, porque não usa os dois diferentes?[/quote]

Olá Marício.

É isso que ocorre. Quando é chamado a função validateCadastroVistoriadorForm(this) (no me caso) do JavaScript, o browser informa que existe um erro no JavaScript, justamente na função validateRequired. A linha que ocorre o erro é a que passei na mensagem anterior.

Quanto ao problema do ActionForm, pensando melhor eu preciso somente de 1.

Eu necessito de duas telas para realizar a função de alteração de dados: Em uma tela, o usuário faz uma pesquisa, que retornará vários resultados a serem exibidos numa grid.

O usuário selecionará nesta grid o registro que deseja modificar. Feito esta seleção, será executada uma action que abrirá a minha outra tela (a de cadastro), devidamente preenchida.

Depois que o usuário terminar de modificar os dados, ele chamará uma action que persistirá estas modificações no banco, e que deverá retornar para a minha primeira tela (a de pesquisa). Esta tela de pesquisa deverá exibir para o usuário os dados da pesquisa que ele realizou anteriormente, só que com os dados relativos ao registro que ele modificou devidamente atualizados. Ou seja, preciso possuir num mesmo form os dados do registro (para inclusão / modificação) e os dados da pesquisa, concorda?

Atualmente eu utilizo somente um ActionForm, que possui dados referentes a tela de cadastro e a de pesquisa. Suponhamos que este Action form precise de duas validaçõs distintas:

  • A primeira seria realizada nos dados do cadastro (na saída da tela de cadastro), no momento em que o usuário executar a a action de inclusão dos dados no banco, ou a de alteração dos dados no banco. Este Validator resume-se em princípio na verificação se os campos foram devidamente preenchidos;

  • A segunda será realizada no valor que o usuário irá informar para pesquisa (na tela de pesquisa), no momento que pressionar o botão
    "pesquisar", que chamará a action que retornará os dados desejados pelo usuário. Este Validator resume-se em princípio na verificação se o campo de valor de pesquisa foi devidamente preenchido.

Bom, aqui tenho um dilema. Necessito de um único form, pois no processo de alteração de um registro do banco de dados, necessito ter armazenado os dados da pesquisa realizada (pois quando voltar para esta tela os dados da pesquisa deverão continuar sendo exibidos), e os dados do cadastro, para que o usuário possa realizar as devidas alterações e depois enviar para a action que gravará no banco.
Ao mesmo tempo, deverei realizar validações diferentes no mesmo ActionForm, dependendo da tela em que me encontre.

E a minha pergunta neste caso seria: Como resolver este problema?

Se eu usar o método Attribute para indicar um nome diferente para o form em cada mapeamento da action, de forma a utilizar um nome de form na tela de cadastro e um outro na tela de pesquisa, eu conseguiria utilizar estes nomes na configuração do Validator? Ou o Validator só aceita o nome declarado no mapeamento do ValidatorForm no Struts (na verdade uso o ValidatorForm, por causa da validação automática)?

Pessoal,

tirando a parte do JavaScript que ainda falta resolver, já consegui definir como trabalhar com as actions e o validator no sistema, e está funcionando que é uma belza. :lol:

Quanto ao problema com o JavaScript, vou tentar resolver. Não conseguindo, abro um outro tópico no outro forum, tendo em vista que aqui é específico para discuções sobre padrões de projetos e arquiteturas, e não sobre problemas de framework. Como a conversa acabou indo para este lado (por causa dos meus problemas), o melhor é terminar as conversas por aqui e continuar num tópico futuro que será postado no forum correto. Isto se eu não conseguir resolver antes o problema com o JavaScript.

No mais, quero agradecer a todos. A ajuda que vocês me deram foi de grande valia para entender melhor como funciona as Actions e Validators no Struts, e ajudaram a definir uma boa forma para se trabalhar com estes recursos.

Um grande abraço, e que Deus os abençoem.