Gerando estrutura de controle em uma página com JSF

21/10/2010

Quero criar um estrutura de controle na página para que quando eu efetue uma consulta aos clientes cadastrados eu retorne um formulário com os dados preechidos em caso positivo, ou caso ele ainda não esteja cadastrado apresente uma mensagem na página seguida de um link que o redirecionara para a pagina de cadastro.

Tentei fazer da seguinte forma

campos para a consulta

<h:form>
            <table>
                <tr>
                    <td><h:outputText value="Placa" /><h:inputText value="#{alugaQuartosBean.consultaPlaca}"/>
                        <h:commandButton value="Pesquisar placa" action="#{alugaQuartosBean.consultarPlaca}"/></td>
                </tr>
            </table>
        </h:form>
        <h:form>
            <table>
                <tr>
                    <td><h:outputText value="Nome ou CPF" />
                        <h:inputText value="#{alugaQuartosBean.hospede.campoParaConsulta}" />
                        <h:commandButton value="Pesquisar nome/CPF" action="#{alugaQuartosBean.consultarPlaca}"/>
                    </td>

                </tr>
            </table>
        </h:form>

Estrutura de controle criada dentro do jsp

 <%

                    //Gerando uma instancia de carro para efetuar o controle atraves da pesquisa do Carro
                    Carro carro = new Carro();
                   
                    FacesContext context = FacesContext.getCurrentInstance();
                    HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();

                    Carro c = (Carro) req.getAttribute("c");

                    carro.setId(c.getId());
                   
                    if (carro.getId() == null) {

        %>

//continuação da pagina.

link para formAlugaQuartos: http://paste-it.net/public/b9df790/
QuartosAlugadosBean: http://paste-it.net/public/rfe3cab/
Marcos Sousa

Marcos Sousa

Curtidas 0

Respostas

Marcos Sousa

Marcos Sousa

21/10/2010

Peço por favor desconsiderar um destes chamados, pois ao enviar o chamado hoje a bateria do notebook acabou bem na hora, e logo em seguida recuperei as tarefas que estavam sendo efetuadas e deu um refresh na página e já havia um chamado aberto.

Desde já agradeço.
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

21/10/2010

Oi Marcos,

No seu caso, você não deve incluir esta lógica de navegação dentro dos seus arquivos JSP jamais. Isto porque na esmagadora maioria dos casos (99,99999999%) o desenvolvedor acaba caindo em armadilhas.

Como você está trabalhando com JSF 1.2, o apropriado é implementar esta lógica de navegação dentro dos próprios managed beans. Lembre-se de que estas regras são implementadas em dois locais: no seu arquivo de configuração faces-config.xml e no valor de retorno das actions presetes em seus managed beans.

Vou então te passar um exemplo bastante simples. O de uma página de login, que depois você poderá aplicar a básicamente qualquer outro. Suponha que você possua um managed bean tal como o abaixo, responsável pelo login de seus usuários.

class Login {
private String login;
private String senha;
// getters e setters omitidos para a clareza
public String entrar() {
if (login_valido(login, senha)) { // vou omitir a implementação desta função
return "entre";
else
return "saia";}
}

No caso de um login bem sucedido, será retornado o valor "entre", e caso contrário, o valor "saia". No seu arquivo faces-config.xml, você mapeará os direcionamentos que deve fazer em ambos os casos. Lá você define que, para cada outcome, uma página deva ser exposta.
Para mais detalhes sobre navegabilidade em aplicações JSF, sugiro que você dê uma lida neste PDF (é bem pequeno, trata-se na realidade de uma apresentação). http://homepages.dcc.ufmg.br/~vfsmota/uit/topicos/jsf/02-Page-Navigation-br.pdf
GOSTEI 0
Devmedia

Devmedia

21/10/2010

Marcos, a resposta do consultor solucionou a sua dúvida? podemos encerrar o chamado?
GOSTEI 0
Marcos Sousa

Marcos Sousa

21/10/2010

Minha dúvida ainda não foi solucionada. Tenho uma página JSP: http://paste-it.net/public/u25fe0d/
Onde tenho dois campos para pesquisa, no primeiro campo pesquiso pela placa do veículo e no segundo pelo Nome/CPF do hospede.

Para ocultar os formularios com as informações a serem mostradas após a pesquisa adicionei a tag <h:form> o atributo rendered que ficou assim

<!--Formulario para a pesquisa por placa        -->

        <h:form rendered="#{alugaQuartosBean.statusCarro == true}">
...
</h:form>

 <!-- formulario a ser renderizado em caso de busca por nome/cpf hospede-->
        <h:form rendered="#{alugaQuartosBean.statusHospede == true}">
           .
           .
           .
         </h:form>


No formulario de pesquisa por placa não estou conseguindo mostar o nome do hospede:

<tr>
                        <td><h:outputText value="Hospede" /></td>
                        <td><h:inputText value="#{alugaQuartosBean.carro.hospede.nome}" readonly="true" /> </td>
                    </tr>

Tenho um relacionamento de 1XN entre hospede e carro e tenho o atributo hospede em minha classe que representa a entidade Carro.

Como faço para resolver este problema?

Segue abaixo codigo fonte:

QuartosAlugadosBean: http://paste-it.net/public/d84e613/
Carro:  http://paste-it.net/public/ldff012/
Hospede: http://paste-it.net/public/s7908c5/


GOSTEI 0
Henrique Weissmann

Henrique Weissmann

21/10/2010

Marcos,

analisando a classe QuartosAlugadosBean, o que observei é que sim, você cria uma nova instância da classe Carro em seu interior, que inclusive está acessível através de um getter.

No entanto, em momento algum você define o valor do atributo hospede da sua instância de carro e também não define o seu nome. Consequentemente, o nome do hóspede realmente não irá aparecer.
GOSTEI 0
Marcos Sousa

Marcos Sousa

21/10/2010

O problema foi solucionado.

GOSTEI 0
POSTAR