Struts - <html:....algo>

7 respostas
H

Olá pessoal…

Tenho uma dúvida que acredito ser fácil para vcs resolverem…
Fiz um formulário, só que usei as tags normais html e não as do struts…
Criei um Value Object e estendi a ActionForm do struts…
Mas quando clico submit do formulário, os dados não populam meu Form VO…
Seria pq eu estou usando as tags normais do HTML e não as do Struts?

7 Respostas

C

Olá,

Também me sinto um pouco incomodado em ter que usar essas tags, mas no geral elas acabam sendo bastante úteis para recuperar as informações do seu form, como em casos de validação do form em que o form tem que voltar preenchido. Se você não for usar as tags html:text, terá q fazer na mão algo do tipo: <input type=“text” value="<c:out value="{form.nome}" />, ou coisas até piores como no caso de ser um combo.
Quando o pessoal recomenda a não usar as tags do struts, creio que estão se referindo às tags do tipo logic:iterate, etc…
De qualquer forma, se vc quiser continuar usando as tags html normais, vc apenas precisa garantir que:
1 - O seu form-bean esteja associado à action no struts-config.xml
2- Os atributos do seu form html tenham o mesmo nome dos atributos do seu form-bean, e o seu form-bean tenha os set’s/get’s.
O Struts não faz nenhuma validação para verificar se vc usou as tags corretas, pelo que eu sei, ele somente faz o seguinte:
1 - Recupera a action requisitada
2 - Recupera o form-bean atrelado àquela action
3 - Recupera os parametros que vc passou na sua requisicao, e seta os valores nas propriedades correspondentes do form-bean.

[]'s

marciobarroso

Cara, se vc não quiser usar as tag libs do struts vc pode usar assim :
<input type=“text” name=“email” value="${usuarioForm.email}">

A partir da especificação 2.3 do Servlet, vc já pode usar a Expression Language normalmente no código html sem a necessidade da jstl.

Qualquer dúvida, posta aí.

[ :smiley: ]

H

Estou usando algo bem HTML mesmo…
Tipo …

E esperava receber esses valores no meu form bean, pois…

private String name;
public String getName() {
...
}
public void setName(String name) {
...
}
and so on...

e no meu mapeamento coloco o form…
na minha Action…

public ActionForward ... (...  ) {
...
AlgumForm autzFrm = (AlgumForm) form;
String nome = autzFrm.getName();
...
return ...;
}

Não funciona, não povoa meu form bean!!! :shock:

Seriam as tags? :?:

marciobarroso

Carinha.

Prá vc submeter dados para uma action, vc nem precisa usar as tag libs …

vc só deve se certificar que está submetendo em um action mapping, e que este action mapping esteja assinado para receber um form que contenha os atributos q estão sendo submetidos no seu form.

Exemplo.

&lt;struts-config&gt;

	&lt;form-beans&gt;

		&lt;form-bean name="meuForm" type="org.apache.struts.action.DynaActionForm"&gt;
			&lt;form-property name="nome" type="java.lang.String" /&gt;
			&lt;form-property name="sobrenome" type="java.lang.String" /&gt;
			&lt;form-property name="email" type="java.lang.String" /&gt;
		&lt;/form-bean&gt;	
   
  	&lt;/form-beans&gt;

	&lt;action-mappings&gt;
    		
		&lt;action
      			path="/meuActionMapping"
      			type="br.com.eu.MinhaAction"
      			name="meuForm"
      			scope="request"
      			validate="false"&gt;
      			&lt;forward name="success" path="/sucesso.jsp"/&gt;
			&lt;forward name="error" path="/erro.jsp"/&gt;
    		&lt;/action&gt;

	&lt;/action-mappings&gt;

&lt;struts-config&gt;

Na action :

public class MinhaAction extends Action {

	public ActionForward execute(
					ActionMapping mapping, 
					ActionForm form, 
					HttpServletRequest request, 
					HttpServletResponse response) throws Exception {

        
	AlgumForm f = (DynaActionForm)form;
        
	String nome = f.getNome();
	
        String fwd = "success";
        
        return mapping.findForward(fwd);
    	}
}

seu form no jsp deve ser assim:

&lt;form action="/meuActionMapping.do" method="post"&gt;
Nome:	&lt;input type=text name=nome&gt;
Sobrenome:	&lt;input type=text name=sobrenome&gt;
E-mail:	&lt;input type=text name=email&gt;

&lt;input type=submit value=send&gt;
&lt;/form&gt;

Isto é o suficiente, tomando alguns cuidados :

Estar com o servlet do struts no padrão recomendado, que no caso é o .do, e caso esteja diferente, é só adequar ao action do form.
Este não usou a versão atualizada do struts, onde o método de entrada é enviado como um parametro e processado em uma classe chamada DispatchAction que deve ser extendida na sua action, e adicionado o nome deste campo do forme no seu action mapping como parameter="<nome do campo que virá com o nome do método>";

Cara …se precisar de ajuda posta aí.

[ :smiley: ]

H

Interessante…

quando passa o input somente com “id” o valor vai como null, mas quando passa com “name=‘nome da variável’” ele pega normalmente!

Legal, não é necessário colocar as tags do struts, como “<html:algo…” que dificultam o convívio do programador com o webdesigner!

Só não testei tirar a tag html:form, mas ficando só ela já ajuda bastante!!!

Valeu pessoal pela ajuda!!! :smiley:

C

O maior benefício de se usar essas tags do struts não é para o caso em que se tem campos do tipo text, e sim qdo se tem campos como combos (select), pois para vc poder recuperar os valores selecionados anteriormente, terá que se desdobrar fazendo maracutaias com jstl e html, que no final das contas vai ficar pior ainda pro lado do designer.

H

Não precisa usar Struts nesse caso também…
Basta usar JavaScript com HTML e XML para comunicar com o server, ou seja, AJAX!
Fica show de bola, mais rápido do que pensamento para povoar selects encadeados, tipo País, Estado, Cidade, Bairro, Rua…
E o melhor, são tecnologias que o webdesigner que se preze tem que dominar!!!

Criado 11 de outubro de 2006
Ultima resposta 16 de out. de 2006
Respostas 7
Participantes 3