Ajuda com rich: tabPanel

5 respostas
D

opsss…ver se alguem pode mim ajudar…

tenho uma aplicacao como muitos campos para um cadastro
entaum resolvir dividi-los em abas

cada aba contem 10 campos por exemplo

o problema eh q quando aciono o botao de cadastro
ele soh pega os dados dos campos q estao na aba q esta sendo visualizada no momento

os campos das outras abas sao todos passados como nulo

como posso resolver esse problema?
alguem pode ajudar

5 Respostas

2

DaniloVL, como vc está ligando o campo ao seu controle? É um único objeto né?

Se for mais de um pode acontecer esse problema, agora o mais provável é que estejam em forms diferentes, cada aba tem um form? Pq se for assim você terá que colocar um forma geral pra poder pegar os dados de todas abas.

Posta sua página e seu controle que fica mais fácil de ajudar…

abraço

D
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<!-- RichFaces tag library declaration -->
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>tabPanel</title>
</head>
<body>
<f:view>
<a4j:region>
<a4j:outputPanel ajaxRendered="false">
<h:form id="form1">
<rich:panel  header="Deparments" style="width:450px" id="pnl">
	<rich:tabPanel switchType="ajax"  binding="#{Controller.tabPanel}">
        
        <rich:tab label="CNPJ"   actionListener="#{Controller.controleAbas}">
            <h:outputText value="CNPJ:" />
			<h:inputText size="15" id="cnpjId" value="#{Controller.cnpj}" />
			<f:param value="#{Controller.cnpj}" name="cnpj"/>
        </rich:tab>
        
        <rich:tab label="Nome" actionListener="#{Controller.controleAbas}">
            <h:outputText value="Nome:" />
			<h:inputText size="15" id="nomeId" value="#{Controller.nome}" />
			<f:param value="#{Controller.nome}" name="nome"/>
        </rich:tab>
        
        
    </rich:tabPanel>
    <a4j:commandButton value="Salvar" actionListener="#{Controller.adicionarEmpresa}"/>
    <a4j:commandButton value="Cancelar"/>
</rich:panel>
</h:form>
</a4j:outputPanel>
</a4j:region>
</f:view>
</body>

</html>

Ops valeu pela primeira resposta....cara tou aperriado jah
nao sei se essa eh a maneira correta......foi a forma q encontrei mas se houver outra forma tbm sera bem vinda
aew eh soh um exemplo........q tava testando...claro cada aba tera mais de um campo.....era soh pra testar

eu utilizei o f:param
pq por exemplo eu prenchi o campo1 da aba1.....aew seguia em frente e clicava na aba 2 e preenchia o campo2.......caso eu quisesse voltar para a aba1 novamente o campo1 esstava em branco
mais achei isso meio gambiarra sabe...=D

aki segue o controller

package danm.ccv.controller;

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpServletRequest;

import org.ajax4jsf.component.html.HtmlAjaxCommandLink;
import org.richfaces.component.UIDataTable;
import org.richfaces.component.UITabPanel;

import danm.ccv.bean.Empresa;
import danm.ccv.facade.Facade;

public class EmpresaController {

	Empresa empresa = new Empresa();
	private UIDataTable table;
	private UITabPanel tabPanel;
	private String cnpj;
	private String nome;
	private Facade facade = Facade.getInstance() ;   
	private HtmlAjaxCommandLink updateLink;
	private boolean editable = false; 
	private String id;
	private DataModel model;
	
	
	public void controleAbas(ActionEvent event){
		FacesContext context = FacesContext.getCurrentInstance();  
		HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
		
		if(req.getParameter("nome")!=null){
			String novoNome = new String(req.getParameter("nome"));
			if(!novoNome.equals(nome)){
				if (!novoNome.equals("")){
				setNome(novoNome);
			}
			}
		}
		
		if(req.getParameter("cnpj")!=null){
			String novoCnpj = new String(req.getParameter("cnpj"));
			if(!novoCnpj.equals(cnpj)){
				if (!novoCnpj.equals("")){
				setCnpj(novoCnpj);
			}
			}
		}
		
	}
	
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public void novaEmpresa(){
		empresa = new Empresa();
	}
	
	public DataModel listarEmpresas(){
		model = new ListDataModel(facade.listarEmpresa());
		return model;
	}
	
	public void adicionarEmpresa(ActionEvent e) {
	    empresa.setCnpj(this.cnpj);
	    empresa.setNome(this.nome);
		facade.salvarEmpresa(empresa);
	    novaEmpresa();
	}
	
	public void excluirEmpresa(ActionEvent e) {
	    if (table.getRowData() != null) {
	      Empresa empresaRemover = (Empresa) table.getRowData();
	      facade.removerEmpresa(empresaRemover);
	      updateLink.setRendered(false);
	    }
	}
	
	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public UITabPanel getTabPanel() {
		return tabPanel;
	}

	public void setTabPanel(UITabPanel tabPanel) {
		this.tabPanel = tabPanel;
	}

}

Obrigado
qualquer outra sugestao tbm eh aceita
caso tenha algum exemplo q vc jah tenho feito e queira mandar
tbm estamos aceitando

valewxxxx

estamos aceitando qualquer coisa q funcione...kkkkkkk
eh o desespero

obrigado pela atencao

2

Cara, eu uso o tabPanel de uma maneira um pouco diferente. Primeiro, porque vc ta passando o atributo por parametro? pra pegar na outra aba?

Segundo, muda o switchType para “client”, que ele vai carregar o tabPanel inteiro e vai parar com esse problema de ficar em branco quando vc mudar a aba. Fora isso ta certo.

D

Caraca todo meu problema…era justamente

switchType para “client”

e sabia que existia os tres tipos

mais naum sabia a diferenca entre os tres

valeu pela ajuda pessoal

principalmente o 22-Gers

M

22-Gers, você pode colocar o modelo que você utiliza ???

Criado 8 de maio de 2009
Ultima resposta 9 de mai. de 2009
Respostas 5
Participantes 3