Validar e não validar Campos obrigatórios em JSF na mesma página

10 respostas
J

Na mesma página JSF, tem o campo chamado que precisa ser validado ao clicar no botão “Salvar”. No entanto, quanto clico no botão “Pesquisar” que está na mesma página, não é obrigatório informar o número do chamado. No entanto, o JSF informa que o campo é obrigatório e a pesquisa não prossegue. Lembrando que, ao clicar no botão “Salvar” o sistema irá apenas salvar os dados no banco de dados, e funciona corretamente. E, ao clicar no botão pesquisar, o sistema precisa exibir uma outra página com todos os registros encontrados. Segue minha página JSF de exemplo.
Desde já, obrigado…

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:ui="http://java.sun.com/jsf/facelets"
	  xmlns:c="http://java.sun.com/jstl/core"
	  xmlns:tr="http://myfaces.apache.org/trinidad"
	  lang="pt-br">
	  
<body>
        
<ui:composition template="template.xhtml">
       
<ui:define name="titulo">
    Cadastro de Pedidos da Operadora
</ui:define>

<ui:define name="conteudo">
	<div id="formulario">

		<h:panelGrid columns="1" width="100%">
			<h:outputText value="Chamado 108 On-Line"/>
			<h:inputText id="ped_Chamado" value="#{pedidoOperadoraController.pedidoOperadora.ped_Chamado}" required="true" requiredMessage="Campo obrigatório" size="20" maxlength="15"/>
			<f:param id="paramChamado" value="#{pedidoOperadoraController.pedidoOperadora.ped_Chamado}" />
			<h:message for="ped_Chamado"/>  

			<!--<h:message for="ped_Chamado"/>  required="true" requiredMessage="Campo obrigatório"   -->
			<!--  -->
			<h:outputText value="Regional" />
			<h:inputText id="ped_Regional" value="#{pedidoOperadoraController.pedidoOperadora.ped_Regional}" size="20" maxlength="15"/>
			<f:param id="paramRegional" value="#{pedidoOperadoraController.pedidoOperadora.ped_Regional}" />

			<h:outputText value="Operadora" />
			<h:inputText id="ped_Operadora" value="#{pedidoOperadoraController.pedidoOperadora.ped_Operadora}" size="20" maxlength="15"></h:inputText>
			<f:param id="paramOperadora" value="#{pedidoOperadoraController.pedidoOperadora.ped_Operadora}" />


			<h:outputText value="Data do Chamado 108 On-Line" />  
			<h:inputText id="ped_DataChamado" value="#{pedidoOperadoraController.pedidoOperadora.ped_DataChamado}" size="13" maxlength="10"/>

			<h:outputText value="Data de Envio para Assinatura HP" />  
			<h:inputText id="ped_DataEnvioAssinatura" value="#{pedidoOperadoraController.pedidoOperadora.ped_DataEnvioAssinatura}" size="15" maxlength="10"/>

			<h:outputText value="Data de Retorno HP" />  
			<h:inputText id="ped_DataRetorno" value="#{pedidoOperadoraController.pedidoOperadora.ped_DataRetorno}" size="13" maxlength="10"/>

			<h:outputText value="Data de Envio para Operadora" />  
			<h:inputText id="ped_DataEnvioOperadora" value="#{pedidoOperadoraController.pedidoOperadora.ped_DataEnvioOperadora}" size="13" maxlength="10"/>

			<h:outputText value="Data de Retorno da Operadora" />  
			<h:inputText id="ped_DataRetornoOperadora" value="#{pedidoOperadoraController.pedidoOperadora.ped_DataRetornoOperadora}" size="13" maxlength="10"/>

			<h:outputText value="No. do Pedido da Operadora" />  
			<h:inputText id="ped_PedidoOperadora" value="#{pedidoOperadoraController.pedidoOperadora.ped_PedidoOperadora}" size="35" maxlength="25"/>

			<h:outputText value="Data de Entrega do Aparelho - Operadora" />  
			<h:inputText id="ped_dataEntregaAparelho" value="#{pedidoOperadoraController.pedidoOperadora.ped_DataEntregaAparelho}" size="13" maxlength="10"/>
			
			<h:outputText value="Observação" />  
			<h:inputTextarea id="ped_Observacao" value="#{pedidoOperadoraController.pedidoOperadora.ped_Observacao}" cols="70" rows="5"/>
			
		</h:panelGrid>
		
		<h:panelGrid border="0" columns="3" >
			<h:column>
				<h:commandButton value="Salvar" class="botao" action="#{pedidoOperadoraController.salvar}">
					<!--image="../images/btn_Salvar.jpg"-->
				</h:commandButton> 
			</h:column>
			
			<h:column>
				<h:commandButton value="Pesquisar" class="botao" immediate="true" actionListener="#{pedidoOperadoraController.capturaParametros}" action="mostrarPedidoOperadora" >
				</h:commandButton>  
				        
			</h:column>
			
			<h:column>
				<h:commandButton value="Limpar" class="botao" action="#{pedidoOperadoraController.novoPedidoOperadora}" >
				</h:commandButton>          
			</h:column>
		</h:panelGrid> 
		
	</div>
</ui:define>

</ui:composition>
        
    </body>
</html>

10 Respostas

F

Bom dia,

Adicione o atributo immediate="true" no seu seu botão.

<h:commandButton value="Pesquisar" immediate="true" action="#{meuMB.acao}" />

Atenciosamente,

Fábio

J

Fábio, já tem o immediate=“true” no botão, conforme o código anexado. É este o problema, mesmo assim não funciona.

N

Olá,

deveria funcionar. Faça o seguinte teste:

  1. Remova o actionListener do commandButton Pesquisar (faça a chamada diretamente para action)
  2. Reinicie o seu servidor. Se necessário, apague os arquivos temporários e o próprio .war de deploy. Refaça o deploy e reinicie o servidor

Da maneira que você fez está correto. Eu tenho um formulário muito parecido como este seu, e funciona exatamente da maneira que você gostaria.

Abs!

J

Ja exclui o .war e os arquivos temporários. Agora, não entendi quando disse para fazer a chamada diretamente para a ACTION.
Estou anexando o código fonte da classe controladora e o arquivo que mostra os resultados da pesquisa. Veja se pode me ajudar. Lembrando que eu preciso executar o ActionListener para pegar alguns parâmatros para pesquisa, quanto eles são informados.

package br.com.integrator.controller;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.component.html.HtmlInputText;
import javax.faces.context.FacesContext;

import org.apache.poi.hssf.record.formula.functions.Even;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.integrator.dao.DaoGenerico;
import br.com.integrator.entities.PedidoOperadora;
import br.com.integrator.util.FacesUtils;

@Controller("pedidoOperadoraController")
@Scope("session")

public class PedidoOperadoraController 
{
	private PedidoOperadora pedidoOperadora;
	
	@Resource
	private DaoGenerico<PedidoOperadora, Integer> pedidoOperadoraDao;
	
	private DataModel model;
	private int maxPorPagina = 20;
	private int paginaAtual = 0;
	private int totalRegistros;
	private String paramChamado;
	private String paramRegional;
	private String paramOperadora;
	
	public HtmlInputText inputChamado;

	public HtmlInputText getInputChamado() {
		return inputChamado;
	}

	public void setInputChamado(HtmlInputText inputChamado) {
		this.inputChamado = inputChamado;
	}

	public String getParamChamado() {
		return paramChamado;
	}

	public void setParamChamado(String paramChamado) {
		this.paramChamado = paramChamado;
	}

	public String getParamRegional() {
		return paramRegional;
	}

	public void setParamRegional(String paramRegional) {
		this.paramRegional = paramRegional;
	}

	public String getParamOperadora() {
		return paramOperadora;
	}

	public void setParamOperadora(String paramOperadora) {
		this.paramOperadora = paramOperadora;
	}

	public PedidoOperadora getPedidoOperadora() {
		return pedidoOperadora;
	}

	public void setPedidoOperadora(PedidoOperadora pedidoOperadora) {
		this.pedidoOperadora = pedidoOperadora;
	}

	public DaoGenerico<PedidoOperadora, Integer> getPedidoOperadoraDao() {
		return pedidoOperadoraDao;
	}

	public void setPedidoOperadoraDao(
			DaoGenerico<PedidoOperadora, Integer> pedidoOperadoraDao) {
		this.pedidoOperadoraDao = pedidoOperadoraDao;
	}

	public DataModel getModel() {
		return model;
	}

	public void setModel(DataModel model) {
		this.model = model;
	}
	
	public PedidoOperadoraController()
	{
		this.pedidoOperadora = new PedidoOperadora();
	}
	
	public String novoPedidoOperadora()
	{
		this.pedidoOperadora = new PedidoOperadora();
		return "frmPedidoOperadora";
	}
	
	
	public int getMaxPorPagina() {
		return maxPorPagina;
	}

	public void setMaxPorPagina(int maxPorPagina) {
		this.maxPorPagina = maxPorPagina;
	}

	public int getPaginaAtual() {
		return paginaAtual;
	}

	public void setPaginaAtual(int paginaAtual) {
		this.paginaAtual = paginaAtual;
	}

	public int getTotalRegistros() {
		return totalRegistros;
	}

	public void setTotalRegistros(int totalRegistros) {
		this.totalRegistros = totalRegistros;
	}

	public String salvar()
	{
		try
		{
			if (pedidoOperadora.getPed_Id() == null)
			{
				pedidoOperadoraDao.salvar(pedidoOperadora);
				this.novoPedidoOperadora();
				FacesUtils.mensInfo("Pedido cadastrado com sucesso.");
				
				FacesContext context = FacesContext.getCurrentInstance();
				FacesMessage message = new FacesMessage("Salvo com sucesso.");
				context.addMessage("frmPedidoOperadora", message);
			}
			else
			{
				pedidoOperadoraDao.atualizar(pedidoOperadora);
				FacesUtils.mensInfo("Pedido atualizado com sucesso.");
			}
		}
		catch(Exception e)
		{
			FacesUtils.mensErro("Ocorreu erro ao gravar o Pedido.");
			e.printStackTrace();
		}
		
		return "sucesso";
	}
	
	public String editar()
	{
		setPedidoOperadora(getPedidoOperadoraParaEditarExcluir());
		return "frmPedidoOperadora";
	}
	
	public String excluir()
	{
		PedidoOperadora pedidoOperadora = getPedidoOperadoraParaEditarExcluir();
		
		pedidoOperadoraDao.excluir(pedidoOperadora);
		return "frmMostrarPedidoOperadora";
	}
	
	public String limpar()
	{
		return "loginCorreto";
	}
	
	public PedidoOperadora getPedidoOperadoraParaEditarExcluir()
	{
		PedidoOperadora pedidoOperadora = (PedidoOperadora) model.getRowData();
		return pedidoOperadora;
	}
	
	public DataModel getTodos() 
	{
		//captura o total de registros para efetuar a paginação...
		//
		setTotalRegistros(getTotal());
		
		//model = new ListDataModel(pedidoOperadoraDao.listPesq(retornaQuery(), maxPorPagina, paginaAtual));
		
		
		String sWhere = new String();
		
		String query = "SELECT ped FROM PedidoOperadora ped " +
		   			   " WHERE (1=1) "; 
		
		sWhere = "";

		Map<String, Object> params = new HashMap<String, Object>();

		if (!this.getParamChamado().isEmpty())
		{
			params.put("chamado", "%" + this.getParamChamado() + "%");
			sWhere = sWhere + " AND ped.ped_Chamado LIKE :chamado ";
		};
		
		if (!this.getParamRegional().isEmpty())
		{
			params.put("regional", "%" + this.getParamRegional() + "%");
			sWhere = sWhere + " AND ped.ped_Regional LIKE :regional ";
		};
		
		if (!this.getParamOperadora().isEmpty())
		{
			params.put("operadora", "%" + this.getParamOperadora() + "%");
			sWhere = sWhere + " AND ped.ped_Operadora LIKE :operadora ";
		};
		
		query = query + sWhere + " ORDER BY ped.ped_Id ";

		model = new ListDataModel(pedidoOperadoraDao.listPesqParam(query, params, maxPorPagina, paginaAtual));
		
		return model;
		
	}
	
	public String pesquisar()
	{
		//captura o total de registros para efetuar a paginação...
		//
		setTotalRegistros(getTotal());
		
		if (getTotalRegistros() > 0)
		{
			return "mostrarPedidoOperadora";
		}
		else
		{
			return "frmMensagem";
		}
	}

	/* Início Paginação */
	//Paginacao dos resultados
	//Evita estouro de memoria
	public String primeiraPagina()
	{
		paginaAtual = 0;
		return null;
	}
	
	public String ultimaPagina()
	{
		int rest = totalRegistros % maxPorPagina;
		
		if (rest != 0)
			paginaAtual = totalRegistros - rest;
		else
			paginaAtual = totalRegistros - maxPorPagina;
		
		return null;
	}
	
	public Integer getTotal() 
	{
		//captura o total de registros através de um select COUNT utilizando a JPA...
		//Isto evita estouro de memória "out of memory: java heap space" do java
		//
		String sWhere = new String();
	
		String query = "SELECT COUNT(ped_Chamado) FROM PedidoOperadora ped " +
        " WHERE (1=1) " ;
		
		sWhere = "";

		Map<String, Object> params = new HashMap<String, Object>();

		if (!this.getParamChamado().isEmpty())
		{
			params.put("chamado", "%" + this.getParamChamado() + "%");
			sWhere = sWhere + " AND ped.ped_Chamado LIKE :chamado ";
		};
		
		if (!this.getParamRegional().isEmpty())
		{
			params.put("regional", "%" + this.getParamRegional() + "%");
			sWhere = sWhere + " AND ped.ped_Regional LIKE :regional ";
		};
		
		if (!this.getParamOperadora().isEmpty())
		{
			params.put("operadora", "%" + this.getParamOperadora() + "%");
			sWhere = sWhere + " AND ped.ped_Operadora LIKE :operadora ";
		};
		
		query = query + sWhere;
		
		Number numeroRegistros = pedidoOperadoraDao.numeroRegistros(query, params);

		String strNumeroRegistros = numeroRegistros.toString();
		
		Integer intNumero = Integer.parseInt(strNumeroRegistros);
		
		return intNumero;
	}
	
	public int getProximaPagina()
	{
		int total = totalRegistros;
		
		int soma = paginaAtual + maxPorPagina;
		int proxima = (soma > total)?total:soma;
		return proxima;
	}
	
	//navega para a proxima pagina
	public String proxima()
	{
		int soma = paginaAtual + maxPorPagina;
		if (soma < totalRegistros)
		{
			paginaAtual += maxPorPagina;
		}
		return null;
	}
	
	//navega para a pagina anterior
	public String anterior()
	{
		paginaAtual -= maxPorPagina;
		if (paginaAtual < 0)
			paginaAtual = 0;
		
		return null;
	}
	
	public String retornaQuery()
	{
		String query = "SELECT ped FROM PedidoOperadora ped " +
					   " WHERE (1=1) " + retornaWhere() +
		               " ORDER BY ped.ped_Id ";
		
		return query;
		
	}
/*	
	public String retornaSizeQuery()
	{
		String query = "SELECT COUNT(ped_Chamado) FROM PedidoOperadora " +
        " WHERE (1=1) " + retornaWhere();
		
		return query;
		
	}
*/
	public String retornaWhere()
	{
		String sWhere = new String();
		
		sWhere = "";

		Map<String, Object> params = new HashMap<String, Object>();

		if (!this.getParamChamado().isEmpty())
		{
			params.put("chamado", "%" + this.getParamChamado() + "%");
			sWhere = sWhere + " AND ped.ped_Chamado LIKE :chamado ";
		};
		
		if (!this.getParamRegional().isEmpty())
		{
			params.put("regional", "%" + this.getParamRegional() + "%");
			sWhere = sWhere + " AND ped.ped_Regional LIKE :regional ";
		};
		
		if (!this.getParamOperadora().isEmpty())
		{
			params.put("operadora", "%" + this.getParamOperadora() + "%");
			sWhere = sWhere + " AND ped.ped_Operadora LIKE :operadora ";
		};
		
		return sWhere;

	}
	
	/* Fim Paginação */
	
	/* Pesquisa com parâmetros */
	public void capturaParametros(ActionEvent event)
	{
		UIParameter cmpChamado = (UIParameter) event.getComponent().findComponent("paramChamado");
		this.setParamChamado((String) cmpChamado.getValue());
		
		UIParameter cmpRegional = (UIParameter) event.getComponent().findComponent("paramRegional");
		this.setParamRegional((String) cmpRegional.getValue());
		
		UIParameter cmpOperadora = (UIParameter) event.getComponent().findComponent("paramOperadora");
		this.setParamOperadora((String) cmpOperadora.getValue());
	}
	/* Fim Pesquisa com parâmetros */
	
	
}

Formulário de pesquisa

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:ui="http://java.sun.com/jsf/facelets"
	  xmlns:c="http://java.sun.com/jstl/core"
	  xmlns:tr="http://myfaces.apache.org/trinidad"
	  lang="pt-br">

<body>
        
<ui:composition template="template.xhtml">        
<ui:define name="titulo">
   	Lista de Pedidos da Operadora
</ui:define>

	<ui:define name="conteudo">
	<div id="formulario">
	<h:messages />

		<h:panelGrid border="0" columns="1" >
		   <h:column>
			   <ul>
	              <li>
			        <h:commandLink action="loginCorreto" 
			            immediate="true" style="font-size: 15px; font-weight: bold; font: 15px; color: blue;" >Voltar
			        </h:commandLink>
			   	  </li>
			   </ul>	
		   </h:column> 
		</h:panelGrid> 

	<h:dataTable border="1" id="pedidoOperadora" var="item" value="#{pedidoOperadoraController.todos}" 
	    styleClass="tabela" headerClass="cabecalho" rowClasses="claro,escuro">
	
		<h:column id="column1">
			<h:outputText value="#{item.ped_Id}"/>
			<f:facet name="header" >
				<h:outputText value="ID" style="header"/>
			</f:facet>
		</h:column>
	
		<h:column id="column2">
			<h:outputText value="#{item.ped_Chamado}"/>
			<f:facet name="header">
				<h:outputText value="  No. do Chamado 108 On-Line  " style="width: 600px"/>
			</f:facet>
		</h:column>
		
		<h:column id="column3">
			<h:outputText value="#{item.ped_Regional}" style="width: 350px"/>
			<f:facet name="header">
				<h:outputText value="  Regional  "/>
			</f:facet>
		</h:column>
		
		<h:column id="column4">
			<h:outputText value="#{item.ped_Operadora}"/>
			<f:facet name="header">
				<h:outputText value="   Operadora   " style="width: 400px"/>
			</f:facet>
		</h:column>
		
		<h:column id="column5">
			<h:outputText value="#{item.ped_DataChamado}"/>
			<f:facet name="header">
				<h:outputText value="  Data do Chamado 108 On-Line  " style="width: 400px"/>
			</f:facet>
		</h:column>
		
		<h:column id="column6">
			<h:outputText value="#{item.ped_PedidoOperadora}"/>
			<f:facet name="header">
				<h:outputText value="  Número do Pedido da Operadora  " style="width: 400px"/>
			</f:facet>
		</h:column>

		<h:column>
			<center>
				<h:commandButton value="Editar" image="../images/btn_Editar.gif" action="#{pedidoOperadoraController.editar}"/>
			</center>
			<f:facet name="header">
				<h:outputText value="Editar"/>
			</f:facet>
		</h:column>

		<h:column>
			<center>
			   <h:commandButton value="Excluir" image="../images/btn_Excluir.gif" action="#{pedidoOperadoraController.excluir}"/>
			</center>
			<f:facet name="header">
				<h:outputText value="Excluir"/>
			</f:facet>
		</h:column>
	</h:dataTable>
	
		<h:panelGrid border="0" columns="1" >
		   <h:column>
			   <ul>
	              <li>
			        <h:commandLink action="loginCorreto" 
			            immediate="true" style="font-size: 15px; font-weight: bold; font: 15px; color: blue;" >Voltar
			        </h:commandLink>
			   	  </li>
			   </ul>	
		   </h:column> 
		</h:panelGrid> 
	
	<table cellspacing="5">
		<tr>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.primeiraPagina}" value="Primeira" enabled="#{pedidoOperadoraController.paginaAtual != 0}"/>
			</td>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.anterior}" value="Anterior" enabled="#{pedidoOperadoraController.paginaAtual != 0}"/>
			</td>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.proxima}" value="Proxima" enabled="#{pedidoOperadoraController.total > pedidoOperadoraController.proximaPagina}" />
			</td>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.ultimaPagina}" value="Ultima" enabled="#{pedidoOperadoraController.total > pedidoOperadoraController.proximaPagina}" />
			</td>
		</tr>
	</table>
	
	
	
	</div>
	</ui:define>

</ui:composition>
        
    </body>
</html>
N

Olá,

entendi a necessidade do Listener. Sem problemas o uso dele.

Quanto à seguinte action mostrarPedidoOperadora, esta operação foi definida no controlador PedidoOperadoraController ou em outro controlador?

Porque no PedidoOperadoraController, não foi definido nenhuma operação como essa, e sim há uma referência no return da operação pesquisar. Não deveria ter uma operação chamada mostrarPedidoOperadora nesse controlador?

Se existe e você não colocou tudo bem, mas para mim, deveria existir essa operação.

Abs!

J

ok… eu alterei a chamada do action no form conforme pedaço do código abaixo, que agora vai chamar o pesquisar. Veja se é isto, pois, mesmo assim, continua fazendo a validação dos campos obrigatórios.

<h:column> <h:commandButton value="Pesquisar" class="botao" actionListener="#{pedidoOperadoraController.capturaParametros}" action="#{pedidoOperadoraController.pesquisar}" > </h:commandButton> </h:column>

J

agora o immediate=“true” esta´funcionando sim… o que acontece agora, é que, está ocorrendo erro ao renderizar a página, provavelmente por causa do actionListener. E preciso que o actionListener seja executado, para pegar os parâmetros. Como resolver?

N

Olá,

cara, não acredito que o problema seja no seu listener, pois ele é usado para resgatar os valores da sua tela.

Acredito que o seu problema de renderização está acontecendo por mapeamento errado de navegação feito no seu faces-config.xml. Por exemplo, você tem a seguinte passagem no seu método Pesquisar:

if (getTotalRegistros() > 0)  
         {  
             return "mostrarPedidoOperadora";  
         }  
         else  
         {  
             return "frmMensagem";  
         }

então, você deve ter algo semelhante a isso no seu faces-config.xml:

<navigation-rule>
		<from-view-id>/seu_formulario_pesquisa.extensão</from-view-id>
		<navigation-case>
			<from-outcome>mostrarPedidoOperadora</from-outcome>
			<to-view-id>/sua_pagina_pedidos_operadora.extensão</to-view-id>
			<redirect />
		</navigation-case>
		<navigation-case>
			<from-outcome>frmMensagem</from-outcome>
			<to-view-id>/outra_pagina.extensão</to-view-id>
			<redirect />
		</navigation-case>
	</navigation-rule>

Pegou a idéia? Se tiver alguma dúvida em relação a esses mesmos mapeamentos no seu arquivo de configuração, posta o seu faces-config.xml para que a gente dê uma olhada.

Abs!

J

Ok... estou postando meu FacesConfig.xml, e também meu frmMostrarOperadora.xhtml. No formulário frmMostrarOperadora.xhtml, é chamado o método pedidoOperadoraController.todos, e agora o erro ocorre ao executar este método. Estou postando também um pedaço da mensagem de erro.. Veja se pode me ajudar. Obrigado...

facesConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" 
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
 
 <managed-bean>
 	<managed-bean-name>usuarioController</managed-bean-name>
 	<managed-bean-class>br.com.integrator.controller.UsuarioController</managed-bean-class>
 	<managed-bean-scope>session</managed-bean-scope>
 	
 	<managed-property>
 		<property-name>URL</property-name>
 		<value>ldap://joanesburgo:389</value>
 	</managed-property>
 	<managed-property>
 		<property-name>managerDN</property-name>
 		<value>cn=Manager,dc=corejsf,dc=com</value>
 	</managed-property>
 	<managed-property>
 		<property-name>managerPassword</property-name>
 		<value>secret</value>
 	</managed-property>
 </managed-bean>

 <!-- Navegação do login -->
 <navigation-rule>
	  <from-view-id>/admin/*</from-view-id>

      <!-- Navegação administrativa da entrada do usuário -->
	   <navigation-case>
		   <from-outcome>login</from-outcome>
		   <to-view-id>/admin/login.xhtml</to-view-id>
	  </navigation-case>
      
	   <navigation-case>
		   <from-outcome>frmHome</from-outcome>
		   <to-view-id>/admin/home.xhtml</to-view-id>
	  </navigation-case>

	   <navigation-case>
		   <from-outcome>frmPedidoOperadora</from-outcome>
		   <to-view-id>/admin/frmPedidoOperadora.xhtml</to-view-id>
	  </navigation-case>
	  
	   <navigation-case>
		   <from-outcome>loginFalhou</from-outcome>
		   <to-view-id>/admin/loginError.xhtml</to-view-id>
	  </navigation-case>
	  
	   <navigation-case>
		   <from-outcome>mostrarPedidoOperadora</from-outcome>
		   <to-view-id>/admin/frmMostrarPedidoOperadora.xhtml</to-view-id>
	  </navigation-case>

	   <navigation-case>
		   <from-outcome>frmPedidoOperadoraExcel</from-outcome>
		   <to-view-id>/admin/frmPedidoOperadoraExcel.xhtml</to-view-id>
	  </navigation-case>

	   <navigation-case>
		   <from-outcome>frmMensagem</from-outcome>
		   <to-view-id>/admin/frmMensagem.xhtml</to-view-id>
	  </navigation-case>

 </navigation-rule>
  
  <lifecycle> 
     <phase-listener>
     	br.com.netservice.login.AutorizacaoListener
     </phase-listener> 
  </lifecycle>

<application>
	  <!-- Configura o Apache MyFaces Trinidad para utilizar o UploadFile -->
	  <default-render-kit-id>org.apache.myfaces.trinidad.core</default-render-kit-id>
	  <!--<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>-->
	  <locale-config/>
	  <!-- Configura o Spring 2.5 para trabalhar com JSF 1.2 -->
	  <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
	  
	  <resource-bundle>
	  	<base-name>br.com.integrator.util.messages</base-name>
	  	<var>msgs</var>
	  </resource-bundle>
</application>
 
</faces-config>
frmMostrarOperadora.xhtml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:ui="http://java.sun.com/jsf/facelets"
	  xmlns:c="http://java.sun.com/jstl/core"
	  xmlns:tr="http://myfaces.apache.org/trinidad"
	  lang="pt-br">

<body>
        
<ui:composition template="template.xhtml">        
<ui:define name="titulo">
   	Lista de Pedidos da Operadora
</ui:define>

	<ui:define name="conteudo">
	<div id="formulario">
	<h:messages />

		<h:panelGrid border="0" columns="1" >
		   <h:column>
			   <ul>
	              <li>
			        <h:commandLink action="frmPedidoOperadora" 
			            immediate="true" style="font-size: 15px; font-weight: bold; font: 15px; color: blue;" >Voltar
			        </h:commandLink>
			   	  </li>
			   </ul>	
		   </h:column> 
		</h:panelGrid> 

	<h:dataTable border="1" id="pedidoOperadora" var="item" value="#{pedidoOperadoraController.todos}" 
	    styleClass="tabela" headerClass="cabecalho" rowClasses="claro,escuro">
	
		<h:column id="column1">
			<h:outputText value="#{item.ped_Id}"/>
			<f:facet name="header" >
				<h:outputText value="ID" style="header"/>
			</f:facet>
		</h:column>
	
		<h:column id="column2">
			<h:outputText value="#{item.ped_Chamado}"/>
			<f:facet name="header">
				<h:outputText value="  No. do Chamado 108 On-Line  " style="width: 600px"/>
			</f:facet>
		</h:column>
		
		<h:column id="column3">
			<h:outputText value="#{item.ped_Regional}" style="width: 350px"/>
			<f:facet name="header">
				<h:outputText value="  Regional  "/>
			</f:facet>
		</h:column>
		
		<h:column id="column4">
			<h:outputText value="#{item.ped_Operadora}"/>
			<f:facet name="header">
				<h:outputText value="   Operadora   " style="width: 400px"/>
			</f:facet>
		</h:column>
		
		<h:column id="column5">
			<h:outputText value="#{item.ped_DataChamado}"/>
			<f:facet name="header">
				<h:outputText value="  Data do Chamado 108 On-Line  " style="width: 400px"/>
			</f:facet>
		</h:column>
		
		<h:column id="column6">
			<h:outputText value="#{item.ped_PedidoOperadora}"/>
			<f:facet name="header">
				<h:outputText value="  Número do Pedido da Operadora  " style="width: 400px"/>
			</f:facet>
		</h:column>

		<h:column>
			<center>
				<h:commandButton value="Editar" image="../images/btn_Editar.gif" action="#{pedidoOperadoraController.editar}"/>
			</center>
			<f:facet name="header">
				<h:outputText value="Editar"/>
			</f:facet>
		</h:column>

		<h:column>
			<center>
			   <h:commandButton value="Excluir" image="../images/btn_Excluir.gif" action="#{pedidoOperadoraController.excluir}"/>
			</center>
			<f:facet name="header">
				<h:outputText value="Excluir"/>
			</f:facet>
		</h:column>
	</h:dataTable>
	
		<h:panelGrid border="0" columns="1" >
		   <h:column>
			   <ul>
	              <li>
			        <h:commandLink action="frmPedidoOperadora" 
			            immediate="true" style="font-size: 15px; font-weight: bold; font: 15px; color: blue;" >Voltar
			        </h:commandLink>
			   	  </li>
			   </ul>	
		   </h:column> 
		</h:panelGrid> 
	
	<table cellspacing="5">
		<tr>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.primeiraPagina}" value="Primeira" enabled="#{pedidoOperadoraController.paginaAtual != 0}"/>
			</td>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.anterior}" value="Anterior" enabled="#{pedidoOperadoraController.paginaAtual != 0}"/>
			</td>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.proxima}" value="Proxima" enabled="#{pedidoOperadoraController.total > pedidoOperadoraController.proximaPagina}" />
			</td>
			<td>
				<h:commandLink action="#{pedidoOperadoraController.ultimaPagina}" value="Ultima" enabled="#{pedidoOperadoraController.total > pedidoOperadoraController.proximaPagina}" />
			</td>
		</tr>
	</table>
	
	
	
	</div>
	</ui:define>

</ui:composition>
        
    </body>
</html>
Mensagem de erro
01/06/2011 08:14:41 com.sun.facelets.FaceletViewHandler handleRenderException
SEVERE: Error Rendering View[/admin/frmMostrarPedidoOperadora.xhtml]
javax.faces.FacesException: javax.el.ELException: /admin/frmMostrarPedidoOperadora.xhtml @35,76 value="#{pedidoOperadoraController.todos}": Error reading 'todos' on type br.com.integrator.controller.PedidoOperadoraController
	at javax.faces.component.UIData.getValue(UIData.java:585)
	at javax.faces.component.UIData.getDataModel(UIData.java:1063)
	at javax.faces.component.UIData.setRowIndex(UIData.java:417)
	at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
	at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
	at javax.faces.component.UIData.encodeBegin(UIData.java:879)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:269)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:276)
N

Olá,

este erro está acontecendo porque o método da operação:

value="#{pedidoOperadoraController.todos}"

aparentemente é este

public DataModel getTodos()

correto!?

Se a sua intenção é invocar este método, por padrão do JSF, todas as ações invocadas à partir na camada de visualização, devem retornar o tipo String, assim como você fez nas seguintes chamadas:

action="#{pedidoOperadoraController.editar}"
action="#{pedidoOperadoraController.excluir}"

Ambas operações estão relacionadas a métodos que retornam o tipo String. Faça essa correação no seu controlador, ou crie um outro método que retorne este tipo de valor.

Abs!

Criado 31 de maio de 2011
Ultima resposta 1 de jun. de 2011
Respostas 10
Participantes 3