Struts 1.2.x - request bean

5 respostas
L

PEssoal, tenho uma dúvida aqui no Struts usando form-bean no escopo de request. Se em um formulário eu utilizar esse bean que envia os dados para uma action, que por sua vez, caso exista algum erro no formulário, ele retorna ao formulário inicial com os valores anteriores. Porém os valores só são retornados caso o bean tenha como scope=“session”. Mesmo eu forçando a atribuição do bean ‘na mão’ no request ele não funciona. request.setAttribute(“formBean”,fb); Ele sempre retorna ao formulário com os dados em branco.

Alguém teria como me ajudar? Existe algum ‘work-around’ ? Eu não gostaria que esse form bean fosse da sessão. Obrigado.

5 Respostas

e-cowboy

Cara posta seu action pra gente dar uma olhada! e só lembrando que no jsp os inputs não podem estar com os values default “” tipo <h:inputText value=""…>

L

o struts-config:

<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="registroBean" type="com.pix.struts.formbean.RegistroBean" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action scope="request" name="registroBean" path="/action/registra" type="com.pix.struts.actions.RegistraAction">
      <forward name="erro" path="/index.jsp" redirect="true"/>
      <forward name="sucesso" path="/WEB-INF/sucesso.jsp" />
    </action>

  </action-mappings>

  <message-resources parameter="com.pix.struts.ApplicationResources" />
</struts-config>

Em caso de erro, ele retorna ao index.jsp que é onde está o meu form.

O form da index.jsp:

<html:form method="POST" action="/registra">
    <div align="center"><span style="color:red">${registroBean.mensagem}</span></div>
  	<table align="center" width="200" border="1">
<tbody>
<tr>
	<td>Usu&aacute;rio</td>
	<td><html:text size="20" property="userName" maxlength="50"></html:text></td></tr>
<tr>
	<td>Senha</td>
	<td><html:password redisplay="false" size="20" property="senha" maxlength="50" ></html:password></td>
</tr>
<tr align="center">
	<td colspan="2"><html:submit value="Envia" /></td>
</tr>
</tbody></table>
  </html:form>

O registro bean é apenas um bean normal com os métodos setter e getter de userName, senha e mensagem.

Método execute da action:

public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		RegistroBean rb = (RegistroBean) form;
		String uName = rb.getUserName();
		String senha = rb.getSenha();
		//Se a senha tiver menos de 4 caracteres ou o nome de usuário tiver menos de
		//6 caracteres, será enviado para a página de erro
		if(senha == null || senha.length() < 4 ){
			criaMensagem(request, "Senha inválida!");
			return mapping.findForward("erro");
		}else if( uName == null || uName.length() < 6){
			criaMensagem(request, " > Usuário inválido! <");
			return mapping.findForward("erro");
		}else{
			return mapping.findForward("sucesso");
		}
	}

Nesse exemplo eu quero digitar valores no formulário e se caso haja algum erro voltar ao formulário (index.jsp) com os valores preenchidos.
Porém se o bean é do tipo scope=“request” ele não me traz os valores que eu digitei, e sim coloca os valores padrões(em branco). Se eu coloco ele como scope=“session” ele traz os valores corretos. Alguém poderia ajudar??

e-cowboy

Opa, beleza?
Experimenta fazer o seguinte no seu struts-config.xml mude o para , remova o redirect=“true” e teste! Pode ser isso!
Ok?
Falow

L

Já testei com os 2 cara, por isso botei o redirect = true. Antes estava sem =\

Mais alguma sugestão?

PS: Com DispatchAction com scope=request funciona.(testei isso hoje)

e-cowboy

Pois é, eu uso sempre com dispatchAction e ValidatorForm, coloquei o redirect no meu e parou de funcionar por isso a sujestão! Não tenho outra idéia não colega!

Criado 9 de junho de 2008
Ultima resposta 11 de jun. de 2008
Respostas 5
Participantes 2