Problema ao executar action de botao com rendered

2 respostas
D

Boa tarde a todos,

estou desenvolvimento uma aplicação utlizando jsf, richfaces e facelets...

Tenho uma página bastante simples que consiste em dois campos e um botao...

ao clicar no botao é direcionado para um método do meu managedbean que busca alguns dados do banco e renderiza na tela uma

tabela e outro botao...

o problema é que este botao nao funciona a action...Nao ocorre nenhum erro, simplesmente é como se a action nao existisse...

já tentei colocar o rendered dentro de um painel e o meu botao dentro deste painel mas o problema continua...

segue o codigo da pagina

O.B.S - o codigo em destaque é o botao 'problematico'

<?xml version="1.0" encoding="UTF-8" ?>
<f:view xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich">


	<html>
	<head>
	<title>Atualiza Equipamento Corporate</title>
	</head>
	<body>

	<a4j:form>
		<rich:panel>
			<h:graphicImage url="/image/logo.GIF" />
		</rich:panel>
		<rich:panel header="Consultar range">
			<h:outputText value="Range Inicial: " />
			<h:inputText value="#{config.dataBean.rangeIni}">
				<f:validateLength minimum="1" maximum="30" />
			</h:inputText>
			<h:outputText value="Range Final: " />
			<h:inputText value="#{config.dataBean.rangeFim}">
				<f:validateLength minimum="1" maximum="30" />
			</h:inputText>

			<a4j:commandButton value="Consultar!" action="#{config.searchRange}"
				reRender="tabelaDadosRange,panelMigrar" />
		</rich:panel>
		<rich:spacer height="50" />
		
 




                               <h:panelGroup id="panelMigrar">
			<h:panelGroup rendered="#{config.mostrarTabela}">
				<a4j:commandButton value="Migrar!" action="#{config.updateEquip}" />
			</h:panelGroup>
		</h:panelGroup>
		




                                 <h:panelGroup id="tabelaDadosRange">
			<h:outputText value="#{config.mensagemRetorno}" />
			<h:dataTable value="#{config.bean}" var="item" border="5"
				rendered="#{config.mostrarTabela}">
				<h:column>
					<f:facet name="header">
						<h:outputText value="NUMERO_ID" />
					</f:facet>
					<h:outputText value="#{item.numeroId}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="NUMERO" />
					</f:facet>
					<h:outputText value="#{item.numero}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="EQUIPAMENTO ASSOCIADO" />
					</f:facet>
					<h:outputText value="#{item.equipamento}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="NOME CLIENTE" />
					</f:facet>
					<h:outputText value="TESTE" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="STATUS SISNUM" />
					</f:facet>
					<h:outputText value="#{item.statusId}" />
				</h:column>
			</h:dataTable>
		</h:panelGroup>
	</a4j:form>

	</body>
	</html>

</f:view>

MEU MANAGED BEAN

package com.gvt.atualiza.managed;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.gvt.atualiza.bean.DataBean;
import com.gvt.atualiza.bean.RangeBean;
import com.gvt.atualiza.business.Equipment;

/**
 * Managed Bean que controla as informacoes da tela principal da aplicação
 * 
 * @author G0007896
 * @since 10/2010
 * 
 * */
public class ConfigForm {
	private Logger log = Logger.getLogger(ConfigForm.class);
	private DataBean dataBean = new DataBean();
	private boolean mostrarTabela = false;
	private String mensagemRetorno = "";
	private List<RangeBean> bean = new ArrayList<RangeBean>();

	public void searchRange() {

		try {
			if (this.getDataBean().getRangeFim().length() != 10
					|| this.getDataBean().getRangeIni().length() != 10) {
				mensagemRetorno = "Os campos range inicial e final devem ter 10 caracteres (99-9999 9999)";
			} else {

				log.info("range: " + this.getDataBean().getRangeIni()
						+ " até: " + this.getDataBean().getRangeFim());

				bean = Equipment.getInstance().consultRange(
						this.getDataBean().getRangeIni(),
						this.getDataBean().getRangeFim());
				
				if (bean != null && bean.size() > 0) 
					mostrarTabela = true;
				 else 
					mensagemRetorno = "Nao foram localizados dados na faixa de numeração informada!";
			}

		} catch (Exception e) {
			log.error(e.getMessage(), e);
			mensagemRetorno = "Ocorreu um erro na consulta do range informado";
		}

	}
	
	public void updateEquip(){
		
		log.info("Iniciando processo para atualizar range");
		
		for(RangeBean b : this.getBean()){
			
			System.out.println(b.getNumero());
			
		}
		
	}
	
	public boolean isMostrarTabela() {
		return mostrarTabela;
	}

	public void setMostrarTabela(boolean mostrarTabela) {
		this.mostrarTabela = mostrarTabela;
	}

	public DataBean getDataBean() {
		return dataBean;
	}

	public void setDataBean(DataBean data) {
		this.dataBean = data;
	}

	public String getMensagemRetorno() {
		return mensagemRetorno;
	}

	public void setMensagemRetorno(String mensagemRetorno) {
		this.mensagemRetorno = mensagemRetorno;
	}

	public List<RangeBean> getBean() {
		return bean;
	}

	public void setBean(List<RangeBean> bean) {
		this.bean = bean;
	}

}

Bom,

é isso pessoal, muito obrigado pela atenção

Leonardo De Bona

2 Respostas

pissike

Tente assim

<h:commandButton action="#{seuBean.seuMetodo}" value="Clique!!">
<a4j:support event="onClick" reRender="seuPanel" />
</h:commandButton>

Ou assim

<a4j:commandButton action="#{seuBean.seuMetodo}"  value="Clique!!">
<a4j:support ajaxSingle="true" event="onClick" reRender="seuPanel" />
</a4j:commandButton>

Coloque um breakpoint no método e cerifique-se de que esteja sendo chamado.
Certifique-se de que ele seja public void seuMetodo(){}…

D

Pissike,

obrigado pela resposta, mas ainda o problema persiste.

Obrigado

Criado 8 de outubro de 2010
Ultima resposta 8 de out. de 2010
Respostas 2
Participantes 2