JSF des/complicado

4 respostas
J

Olá pessoALL,

tenho uma aplicação desenvolvida em JSF e estou com o seguinte problema.

Tenho uma página com 150 inputText e não gostaria que meu MB tivesse os 150 get/set. Por isso, peço a ajuda de vocês para tentar fazer algo diferente.

O que fiz… peguei o VO e fiz a ligação direta na página fazendo um único get/set para o mesmo no MB.

<h:inputText value="#{testBean.obj.nome}" />
	<h:inputText value="#{testBean.obj.sobrenome}" />
	...

Desta forma eu consigo mostrar os dados para o usuário. O problema é para atualização dos dados, pois quando o usuário insere um novo valor em um desses campos, o mesmo não é atualizado no MB por falta do get/set. Aí que mora o problema, pois o JSF faz a atualização pelos métodos get/set, não atualizando o objeto completo. Teria alguma forma fazer com que o JSF atualizasse todo o objeto ?

Abraços

4 Respostas

yorgan

Basta o seu objeto ter o get/set para que os getter e setters dele sejam atualizados.
Se isso não está acontecendo, tem alguma coisa errada no código.
QQ duvida posta seu código ai.

[]´s

Daniel

J

Olá Daniel, obrigado pelo retorno.

Então vamos lá.

o MB…

package presentation.bean;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import presentation.NavigationResults;
import util.Constantes;

import business.service.EquipeService;
import business.service.ParticipanteService;
import business.service.PilotoService;
import business.vo.Equipe;
import business.vo.Participante;
import business.vo.Piloto;

public class ParticipanteLogadoBean extends BaseBean {

	private Participante participanteLogado;
	private List<SelectItem> listaEquipe = new ArrayList<SelectItem>();
	private List<SelectItem> listaPiloto = new ArrayList<SelectItem>();
	private ParticipanteService participanteService;
	private EquipeService equipeService;
	private PilotoService pilotoService;

	public EquipeService getEquipeService() {
		return equipeService;
	}

	public void setEquipeService(EquipeService equipeService) {
		this.equipeService = equipeService;
	}

	public PilotoService getPilotoService() {
		return pilotoService;
	}

	public void setPilotoService(PilotoService pilotoService) {
		this.pilotoService = pilotoService;
	}

	public ParticipanteService getParticipanteService() {
		return participanteService;
	}

	public void setParticipanteService(ParticipanteService participanteService) {
		this.participanteService = participanteService;
	}

	public Participante getParticipanteLogado() {
		participanteLogado = (Participante) getSessionBean(Constantes.USUARIO_LOGADO);
		return participanteLogado;
	}

	public void setParticipanteLogado(Participante participante) {
		this.participanteLogado = participante;
	}

	public List<SelectItem> getMontaComboListaEquipe() {
		List<SelectItem> tmp = new ArrayList<SelectItem>();
		List<Equipe> colObj = new ArrayList<Equipe>();
		try {
			colObj = getEquipeService().buscaEquipes();
			for (Equipe e : colObj) {
				tmp.add(new SelectItem(e.getIdEquipe(), e.getNome()));
			}

		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		return tmp;
	}

	public List<SelectItem> getMontaComboListaPiloto() {
		List<SelectItem> tmp = new ArrayList<SelectItem>();
		List<Piloto> colObj = new ArrayList<Piloto>();
		try {
			colObj = getPilotoService().buscaPilotos();
			for (Piloto p : colObj) {
				tmp.add(new SelectItem(p.getIdPiloto(), p.getNome()));
			}

		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		return tmp;
	}

	public void setListaPiloto(List<SelectItem> listaPiloto) {
		this.listaPiloto = listaPiloto;
	}

	public String salvaParticipante() {
		getParticipanteService().getParticipanteDao()
				.update(participanteLogado);
		return NavigationResults.RETORNA;
	}

	public List<SelectItem> getListaEquipe() {
		listaEquipe = getMontaComboListaEquipe();
		return listaEquipe;
	}

	public void setListaEquipe(List<SelectItem> listaEquipe) {
		this.listaEquipe = listaEquipe;
	}

	public List<SelectItem> getListaPiloto() {
		listaPiloto = getMontaComboListaPiloto();
		return listaPiloto;
	}


}

A página é essa…

<?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">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:jsp="http://java.sun.com/JSP/Page"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:c="http://java.sun.com/jstl/core"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:a4j="http://richfaces.org/a4j" template="templates/template.jspx">

	<ui:define name="title"> 
    	Seus Dados
  		</ui:define>

	<ui:define name="description">
		<p>Seus dados para você fazer atualização das informações. Só você
		tem acesso aos seus dados.</p>
	</ui:define>

	<ui:define name="messages">
		<rich:messages styleClass="errorClass" showSummary="true"
			showDetail="false" />
	</ui:define>

	<ui:define name="content">

		<h:form>
			<rich:panel id="dadosParticipante"
				header="Dados de #{participanteLogadoBean.participanteLogado.usuario}">
				<h:panelGrid columns="2" styleClass="largura">
					<h:panelGrid columns="2">
						<h:outputText value="Código" />
						<h:inputText disabled="true"
							value="#{participanteLogadoBean.participanteLogado.idParticipante}" />
						<h:outputText value="Apelido" />
						<h:inputText disabled="true"
							value="#{participanteLogadoBean.participanteLogado.usuario}" />
						<h:outputText value="Nome" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.nome}" />
						<h:outputText value="Senha" />
						<h:inputSecret
							value="#{participanteLogadoBean.participanteLogado.senha}"
							required="true" requiredMessage="O campo senha é obrigatório" />
						<h:outputText value="Telefone Residencial" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.foneResidencial}" />
						<h:outputText value="Telefone Celular" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.foneCelular}" />
						<h:outputText value="Telefone Comercial" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.foneComercial}" />
					</h:panelGrid>
					<h:panelGrid columns="2">
						<h:outputText value="Endereço" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.endereco}" />
						<h:outputText value="Bairro" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.bairro}" />
						<h:outputText value="Cidade" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.cidade}" />
						<h:outputText value="Estado" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.estado}" />
						<h:outputText value="CEP" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.cep}" />
						<h:outputText value="Observações" />
						<h:inputText
							value="#{participanteLogadoBean.participanteLogado.observacoes}" />
						<h:outputText value="Torcida para equipe" />
						<h:selectOneMenu id="listaEquipes" style="width: 145px;"
							value="#{participanteLogadoBean.participanteLogado.equipe.idEquipe}">
							<f:selectItem itemValue="0" itemLabel="Selecione..." />
							<f:selectItems value="#{participanteLogadoBean.listaEquipe}" />
						</h:selectOneMenu>

						<h:outputText value="Torcida para Piloto" />
						<h:selectOneMenu id="listaPilotos" style="width: 145px;"
							value="#{participanteLogadoBean.participanteLogado.piloto.idPiloto}">
							<f:selectItem itemValue="0" itemLabel="Selecione..." />
							<f:selectItems value="#{participanteLogadoBean.listaPiloto}" />
						</h:selectOneMenu>
					</h:panelGrid>
				</h:panelGrid>
			</rich:panel>
			<h:panelGroup layout="block">
				<h:commandButton value="Salvar"
					action="#{participanteLogadoBean.salvaParticipante}" >
					<f:setPropertyActionListener target="#{participanteLogadoBean.participanteLogado}" value="#{participanteLogado}"/>
					</h:commandButton> 
				<h:commandButton value="Voltar" action="retorna" />
			</h:panelGroup>
		</h:form>
	</ui:define>

</ui:composition>

Será que tem poderia ser algo no Facelets ???

Obrigado pelo retorno e ajuda.

Abraços

yorgan

Você já tentou colocar um breakpoint no setParticipanteLogado() para ver se no momento que o salvaParticipante() é acionado ele entra ali para setar os novos valores?

[]´s

Daniel

J

Olá Daniel e pessoALL,

bom… o problema está mais grave que eu imaginava. É o seguinte… De todos os campos que tenho na página jspx, ele só salva o último. Independente de qual seja.

Alguém já viu isso ?

Já verifiquei no meu bean e parece que o JSF não está atualizando os outros atributos.

Que bicho de 7 cabeças é esse ???

Estou utilizando Facelets + Richfaces + JSF + Hibernate(JPA).

Alguém já teve um problema parecido ???

Criado 10 de fevereiro de 2009
Ultima resposta 12 de fev. de 2009
Respostas 4
Participantes 2