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

9 respostas
L

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

H

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

L

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

H

Tem como postar a página toda?

L

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>
H

Primeiro tente trocar de head para h:head.

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

L

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.

:?:

H

Tenta sem o throws Exception.

Seu managedBean está com qual escopo?

L

Escopo de sessão,…

L

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