Beans de requisição no JavaServer Faces

5 respostas
fscontato

Tenho um cadastro dividido em duas partes, primeiro o usuário escolhe o tipo de conta e submete o formulario, depois esse mesmo formulario é devolvido com os demais campos pré-preenchidos e o usuário altera o que precisar.

Estas duas requisições utiilzam o mesmo manaded bean, claro que por se tratarem de duas requisições seguidas serão duas instâncias diferentes do mesmo bean.

O bean se chama cadastroBean, e está declarado no faces-config.xml dessa forma:

<managed-bean>
    <managed-bean-name>cadastroBean</managed-bean-name>
    <managed-bean-class>beans.CadastroBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>

O usuário submete o formulario e então armazeno o tipo de conta dentro do bean dessa forma:

<h:form>

    <h:selectOneMenu value="#{cadastroBean.tipo}">
      <f:selectItems value="#{tipos.itens}"/>
    </h:selectOneMenu>
    <h:commandButton value="Consultar" action="#{cadastroBean.consultar}"/>

    <h:inputText value="#{cadastroBean.nome}"/>
    ...e outros mais...

  </h:form>

Esperava poder preencher o bean com os dados quando consultar() fosse invocado e retornar esta mesma página agora com os campos preenchidos, porém, como um novo cadastroBean é criado para renderizar a página para o usuário este novo bean vem vazio.

Qual a forma correta de se resolver isto? Qual a forma correta de se resgatar os dados de cadastroBean da requisição anterior e repassá-los para o cadastroBean da nova requisição? Alguma sugestão?

O bean é mais ou menos assim:

package beans;
public class CadastroBean {
  public void setTipo(String) ...
  public String getTipo() ...
  public void setNome(String) ...
  public String getNome() ...
  public String consultar() ...
  etc ...
}

5 Respostas

2

Amigo,

Oque você quer fazer é manter as informações do bean da primeira pagina? Se sim. Guarde o bean atual na sessão.

Abraço.

fscontato

Nesse caso não poderia ser guardado em sessão, porque podem ser realizados vários cadastros simultâneos, os dados de um bean de sessão seriam sobrepostos se um segundo cadastro fosse solicitado antes da confirmação do primeiro.

J

FsContato.
Não tenho certeza se posso te ajudar. Mas antes de tudo eu preciso confirmar com você uma coisa: Você disse que se vc guardar os dados na sessão, esses dados podem ser sobrepostos por outra requisição.
Até onde eu conheço, um usuario sempre tem a sua sessão, então a sessão de um não vai sobrepor a sessão criada por outro. è isso mesmo que você disse? Se realmente é, eu pensei que funcionava da forma que acabei de descrever, tem certeza do que diz?
Tu me falando isso ai, eu vejo se posso ver outra forma aqui, é só pra confirmar mesmo.

valew

fscontato

Então, quando eu disse que uma outra requisição pode sobrescrever os dados na sessão é porque na minha aplicação o usuário abre o site no browser e clica no cadastro, esse cadastro abre em outra janela, daí ele pode clicar de novo e abrir outro cadastro em outra janela. Esse é o comportamento que eu preciso, ele deve poder criar mais de um cadastro ao mesmo tempo. É como ler varios emails no gmail ao mesmo tempo em janelas diferentes.

Então, o que acontece, o usuário abre uma primeira requisição de cadastro, abre uma segunda requisição de cadastro, se os dados da primeira requisição estivessem na sessão eles teriam sido sobrescritos agora.

fscontato

E antes de tudo, obrigado a vocês pelas respostas :wink:

Criado 27 de maio de 2009
Ultima resposta 27 de mai. de 2009
Respostas 5
Participantes 3