[RESOLVIDO]Requisição JSF não chama get/set do controller

9 respostas
leorbarbosa

Pessoal,

quando faço uma requisição jsf, os atributos da minha classe que estão no controller não estão sendo ‘settados’ com os valores que preenchi na tela. Por exemplo, abaixo a listagem na qual eu deveria armazenar o ID do chamado ‘controller.chamado.id’

<h:outputText value="Tipo de chamado" />
          <h:selectOneMenu styleClass="inputRequerido" id="tipo" value="#{controller.chamado.id}" required="true">
            <f:selectItem itemLabel="-- Selecione o tipo de chamado -- " itemValue="-1"/> 
            <f:selectItems value="#{daoListar.todos}" var="item" itemLabel="#{item.descricao}" itemValue="#{item.id}" /> 
          </h:selectOneMenu>

Só que quando vou capturar os valores com ‘get…’, está vindo ‘zero’ que é o default, só que o JSF está barrando (como deveria).

try {
      con = conexao;
      pst = con.prepareStatement(sql);
      pst.setInt(1, chamado.getIdTipoChamado());

Em algum ponto não está havendo a ligação do meu objeto local do controller com os atributos da tela(jsf) de cadastro. No ‘controller’ conforme abaixo, instancio o bean logo quando chamo cadastro.

public class ControllerChamado {
  private Chamado chamado;
  private DataModel model;

  public String novoChamado() {
    this.chamado = new Chamado();
    return "novoChamado";
  }

Alguém pode ajudar :?:

9 Respostas

Hebert_Coelho

Vc tem um botão na tela que enviar o valor?

leorbarbosa

O jsf nem aciona o submit, tãopouco renderiza a resposta. Para na validação o logo que o click é dado.

Hebert_Coelho

Tem como postar a página toda?

leorbarbosa

Não gosto de mandar a página toda pois fica difícil de ler, mas acho que está pequena:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
  <head>
    <title>.: HelpDesk - Novo Chamado :.</title>
    <link rel="stylesheet" type="text/css" href="css/formEdicao.css" />
  </head>
  <h:body>
    
    <ui:include src="templates/cabecalho.xhtml" />
    
    <f:view>
      
      <h:form id="edicao">
        
        <h:panelGrid footerClass="alinhaRodape" 
                     columns="2"
                     style="background-color: beige; border-width: 1px; border-style: solid; border-color: silver;margin-left: 15px;font-family: verdana, arial; font-size: 11px; font-weight: bold;">
          <f:facet name="header">
            <h:outputText value="Abrindo um novo chamado" />
          </f:facet>
          
          <h:outputText value="Tipo de chamado" />
          <h:selectOneMenu styleClass="inputRequerido" id="tipoChamado" value="#{controllerChamado.chamado.idTipoChamado}" required="true">
            <f:selectItem itemLabel="-- Selecione o tipo de chamado -- " itemValue="-1"/> 
            <f:selectItems value="#{daoTipoChamado.todos}" var="item" itemLabel="#{item.descricao}" itemValue="#{item.idTipoChamado}" />  
          </h:selectOneMenu>
          
          <h:outputText value="Quem está solicitando" />
          <h:inputText styleClass="inputRequerido" size="50" maxlength="100" id="quemSolicitou" value="#{controllerChamado.chamado.quemSolicitou}" required="true" />

          <h:outputText value="Data de criação" />
          <h:inputText styleClass="inputRequerido" size="16" maxlength="16" id="dtCriacao" value="#{controllerChamado.chamado.dtCriacao}" readonly="true" />
          
          <h:outputText value="Observação" />
          <h:inputTextarea rows="5" cols="100" styleClass="inputOpcional" id="obs" value="#{controllerChamado.chamado.obs}" />
          
          <f:facet name="footer">
            <h:commandButton value="Gravar" action="#{controllerChamado.create}" />
          </f:facet>
        </h:panelGrid>
        
      </h:form>
      
    </f:view>
    
    <ui:include src="templates/rodape.xhtml" />
    
  </h:body>
</html>
Hebert_Coelho

Primeiro tente trocar de head para h:head.

Caso não funcione, post aí o método que o botão create ta chamando.

leorbarbosa

O metodo chamado pelo form é esse aí:

public String create() throws Exception {
    IDao dao = new DaoChamado();
    String retorno = dao.salvar(this.chamado);
    return retorno.indexOf("sucesso") > 0 ? "sucesso_ins" : "falha_ins";
}

Agora é que não entendi nada, na primeira tentativa de gravar para na validação do JSF. Na segunda tentativa passa na validação e chama o método acima. Só que a instância ‘this.chamado’ está com os atributos nulos, e dá erro de SQL no INSERT.

:?:

Hebert_Coelho

Tenta sem o throws Exception.

Seu managedBean está com qual escopo?

leorbarbosa

Escopo de sessão,…

leorbarbosa

Valeu pela força,

passou despercebido o debug da app:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

Daí não recarregava o componente…

Obrigado.

Criado 9 de maio de 2012
Ultima resposta 9 de mai. de 2012
Respostas 9
Participantes 2