Fórum Gerando estrutura de controle em uma página com JSF #389002
21/10/2010
0
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
Curtir tópico
+ 0Posts
21/10/2010
Marcos Sousa
Desde já agradeço.
Gostei + 0
21/10/2010
Henrique Weissmann
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
26/10/2010
Devmedia
Gostei + 0
26/10/2010
Marcos Sousa
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
26/10/2010
Henrique Weissmann
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
30/10/2010
Marcos Sousa
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)