JPA+JSF+RichFaces. Altera no banco, não altera na tela!

11 respostas
vartao

Olá…

estou com problemas na atualização dos dados de um formulário utilizando JPA+JSF+RichFaces.
Ao editar um objeto, é persistido no banco as alterações, porém na tela elas não aparecem.

Se eu o tomcat for resetado, as alterações são mostradas corretamente na tela.

Código da classe responsável por realizar a persistencia.

public class UsuarioDAO implements InterfaceUsuarioDAO {
	private EntityManagerFactory emf;

	private EntityManager getEntityManager() {
		return emf.createEntityManager();
	}

	public UsuarioDAO() {
		emf = Persistence.createEntityManagerFactory("Blog");
	}

	public void atualizar(Usuario usuario) {
		EntityManager em = getEntityManager();
		try {
			em.getTransaction().begin();
			em.merge(usuario);			
			em.getTransaction().commit();			
		} catch (Exception e) {
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

Managed Bean responsável pela chamada

public String salvarUsuario() {	

		InterfaceUsuarioDAO iudao = new UsuarioDAO();
		iudao.atualizar(this.usuario);

		return "voltar";
	}

Alguém saberia me dizer o que pode estar errado?

Obrigado.

11 Respostas

rdantas

Cara, tive um problema parecido estes dias. Seu (entenda por nosso ) problema não é a forma como está persistindo, mas sim, como vc está buscando a informação do banco. Vc tem que usar transação para fazer as consultas também.

EntityManager em = getEm();
EntityTransaction tx = em.getTransaction();
tx.begin();
Query query = em.createQuery(sql);
tx.commit();

Espero ter ajudado,
Rodrigo.

vartao

Obrigado Rodrigo, mas ainda não deu certo.

o método para recuperacao do usuario no banco (na mesma classe do metodo responsavel pela persistencia):

public Usuario recuperaUsuario(String login) {
		EntityManager em = getEntityManager();
		try {
			Query q = em.createQuery(
					"select object(u) from Usuario u where u.login= ?1")
					.setParameter(1, login);			
			return (Usuario) q.getSingleResult();
		} finally {
			em.close();
		}	
	}

Após sua sugestão o código ficou assim:

public Usuario recuperaUsuario(String login) {
		EntityManager em = getEntityManager();
		EntityTransaction tx = em.getTransaction();
		try {
			tx.begin();
			Query q = em.createQuery(
					"select object(u) from Usuario u where u.login= ?1")
					.setParameter(1, login);			 			
			Usuario usr = (Usuario) q.getSingleResult();
			tx.commit();
			return usr;
		} finally {
			em.close();
		}
	}

Mesmo assim, não funcionou. É alterado certinho no banco de dados, porém só aparece as alterações na tela, se o tomcat for reiniciado.

Fiz algo errado?

O problema não seria no JSF? Não seria o o managed bean que não está atualizando o objeto?

M

Ola,

o escopo do seu managed bean eh session? voce esta fazendo a pesquisa novamente apos a atualizacao dos registros? voce tem definido no faces-config.xml o “voltar”?

Em tempo, para pesquisa nao eh necessario transacoes.
Abracos,
Marco.

vartao

Caro Marcos,

os managed beans estão sim com escopo de sessão. A String “voltar” também está descrita nas regras de navegação no faces-config.xml.

Após atualizar objeto, está sendo aberta a página correta. Porém os valores que estão contidas nela é de antes da alteração.

O que poderá ser?

obrigado

L

posta o jsp para analisarmos aew, tive este problema com um datatable e resolvi chamando o meto que o popula sempre que salvo ou edito algum dado.

vartao

mensagens.jsp

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<!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">
<f:view locale="#{ControllerIdioma.locale}">
	<a4j:loadBundle basename="util.rotulos" var="rotulo" />
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<link rel="stylesheet" type="text/css" href="/Blog/images/style.css" />
	<title><h:outputText value="#{ControllerMensagem.usuario.preferencia.titulo}" /></title>
	</head>
	<body>	
	<div id="container">	
		<div id="header">
			<div id="cabecalho">
				<h1><h:outputText value="#{ControllerMensagem.usuario.preferencia.titulo}" /></h1>
				<h2><h:outputText value="#{ControllerMensagem.usuario.nome}" /></h2>
			</div>
		.
		.
		.
		
	</body>
</f:view>
</html>

Managed bean desta página (configurado como ControllerMensagem no faces-config.xml)

public class MensagensController {
	private Usuario usuario;
	private Mensagem mensagem;

	public void setUsuario() {
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		String login = (String) session.getAttribute("login");

		InterfaceUsuarioDAO iudao = new UsuarioDAO();
		this.usuario = iudao.recuperaUsuario(login);
	}

	public Usuario getUsuario() {
		if (this.usuario == null) {
			setUsuario();
		}
		return this.usuario;
	}
}

O fluxo é o seguinte:
É apresentado a página mensagens.jsp (até aqui, é apresentado os valores corretamente). Nela contém um link para a página de alteração cadastral. Quando o usuário é encaminhado para esta página e efetua alguma alteração, ele é encaminhado de volta para cá (mensagem.jsp). O problema é que, ao retornar da alteração, é apresentado os valores do objeto antes da alteração. Os valores não são atualizados na tela.

Espero ter conseguido explicar direito a situação.

obrigado

M

Vartao,

substitua seu metodo getUsuario()

por:

public Usuario getUsuario() {   
        setUsuario();   
        return this.usuario;   
    }

O que acontece eh que como seu escopo e de sessao, a segunda vez que entra em mensagem.jsp seu Usuario ja esta preenchido, portanto ele nao entra if (this.usuario == null), ou seja, ele acaba mostrando o valor que ja esta na sessao.

Na verdade mesmo, o ideal seria voce colocar o codigo do setUsuario no getUsuario, pois fica esquisito no getUsuario() voce chamar o setUsuario().

public Usuario getUsuario(){   
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()   
                .getExternalContext().getSession(false);   
        String login = (String) session.getAttribute("login");   
  
        InterfaceUsuarioDAO iudao = new UsuarioDAO();   
        this.usuario = iudao.recuperaUsuario(login);   
        return this.usuario;   
    }

Marco.

vartao

Grande Marco!!! Foi isso mesmo. PROBLEMA RESOLVIDO.

Está aplicação faz parte do meu trabalho de conclusão de curso.
Defendo ele na segunda agora. Você não tem idéia de como me ajudou! Muito obrigado!!!

Obrigado a todos que responderam!

abs.

Vartão

tiagoemerick

cara… desculpe reativar um post antigo, mas não encontrei a resposta nem a pau pela net afora…

o meu caso é parecido só que o contrario!!!
to numa lista de registros. clico no link de um registro e abre a tela de edicao corretamente.
edito alguns dados e clico em alterar. no metodo o obj nao altera!!!

ou seja… o obj ta com os valores antigos quando apresentei na tela e nenhum campo veio com o valor novo!!!
o bean ta de scope session!

algum pode me ajudar??
isso ta me deixando louco a dias ja!

M

Tiago,

posta seu bean e seu jsf para darmos uma olhada.

Abracos,
Marco.

tiagoemerick
Minha action...
public class ContaViewLogic implements GenericViewLogicInterface{

	private Conta conta;
	private Banco banco;
	private Tipoconta tipoconta;

	private ArrayList&lt;Conta&gt; contaList;
	private ArrayList&lt;Banco&gt; bancoList;
	private ArrayList&lt;Tipoconta&gt; tipoContaList;
	
	public ContaViewLogic() {
		this.conta = new Conta();
		this.banco = new Banco();
		this.tipoconta = new Tipoconta();
		this.contaList = new ArrayList&lt;Conta&gt;();
		this.bancoList = new ArrayList&lt;Banco&gt;();
		this.tipoContaList = new ArrayList&lt;Tipoconta&gt;();
	}
	
	public String abrirDados() {
		String retorno = new String("");
		
		Usuario usuarioSessao;
		try {
			usuarioSessao = UtilFacade.getContaFacade().getUsuarioSessao();
			if (usuarioSessao != null) {
				String codigoContaSelecionada = (String) UtilFacadeWeb.getRequestParameter("codigoContaSelecionada");
				if (codigoContaSelecionada != null && !codigoContaSelecionada.equals("")) {
					// Recupera a conta
					this.conta = (Conta) UtilDao.getContaDao().findById(conta, new Integer(codigoContaSelecionada));
					
					// Monta o select de banco
					montaListaBanco();
					
					// Monta o select de tipoConta
					montaListaTipoConta();
					
					retorno = Constantes.SUCESSO_ABRIR_DADOS;
				}
			} else {
				UtilMensagens.addMessageFatal(Constantes.MSG_SESSAO_EXPIRADA);
				retorno = Constantes.USUARIO_NAO_LOGADO;
			}
		} catch (Exception e) {
			System.out.println("Erro ao pegar usuario logado!");
			e.printStackTrace();
		}
		return retorno;
	}
	
	public String alterar() {
		String retorno = new String("");
		
		Usuario usuarioSessao;
		try {
			usuarioSessao = UtilFacade.getContaFacade().getUsuarioSessao();
			if (usuarioSessao != null) {
				// Seta os novos valores que ainda faltam pra conta e altera
				UtilFacade.getContaFacade().update(this.conta);
				
				this.contaList = UtilFacade.getContaFacade().getContaList(usuarioSessao);
				
				retorno = Constantes.CONTA_BANCARIA;
			} else {
				UtilMensagens.addMessageFatal(Constantes.MSG_SESSAO_EXPIRADA);
				retorno = Constantes.USUARIO_NAO_LOGADO;
			}
		} catch (Exception e) {
			System.out.println("Erro ao pegar usuario logado!");
			e.printStackTrace();
		}
		
		return retorno;
	}

	private void montaListaBanco() {
		this.bancoList = UtilFacade.getBancoFacade().getBancoList();
		ArrayList listaSelect = new ArrayList();   
		for (Iterator iterator = this.bancoList.iterator(); iterator.hasNext();) {
			Banco banco = (Banco) iterator.next();
			listaSelect.add(new SelectItem(banco, banco.getNomeBanco()));
		}
		this.bancoList = listaSelect;
	}

	private void montaListaTipoConta() {
		this.tipoContaList = UtilFacade.getTipoContaFacade().getTipoContaList();
		ArrayList listaSelect = new ArrayList();   
		for (Iterator iterator = this.tipoContaList.iterator(); iterator.hasNext();) {
			Tipoconta tipoconta = (Tipoconta) iterator.next();
			listaSelect.add(new SelectItem(tipoconta, tipoconta.getNomeTipoConta()));
		}
		this.tipoContaList = listaSelect;
	}

	public String abrirNovo() {
		String retorno = new String("");
		
//		Usuario usuarioSessao;
//		try {
//			usuarioSessao = UtilFacade.getContaFacade().getUsuarioSessao();
//			if (usuarioSessao != null) {
//				this.contaList = UtilFacade.getContaFacade().getContaList(usuarioSessao);
//				
//				retorno = Constantes.CONTA_BANCARIA;;
//			} else {
//				UtilMensagens.addMessageFatal(Constantes.MSG_SESSAO_EXPIRADA);
//				retorno = Constantes.USUARIO_NAO_LOGADO;
//			}
//		} catch (Exception e) {
//			System.out.println("Erro ao pegar usuario logado!");
//			e.printStackTrace();
//		}
		
		return retorno;
	}
	
	public String abrirListagem() {
		String retorno = new String("");
		
		Usuario usuarioSessao;
		try {
			usuarioSessao = UtilFacade.getContaFacade().getUsuarioSessao();
			if (usuarioSessao != null) {
				this.contaList = UtilFacade.getContaFacade().getContaList(usuarioSessao);
				
				retorno = Constantes.CONTA_BANCARIA;;
			} else {
				UtilMensagens.addMessageFatal(Constantes.MSG_SESSAO_EXPIRADA);
				retorno = Constantes.USUARIO_NAO_LOGADO;
			}
		} catch (Exception e) {
			System.out.println("Erro ao pegar usuario logado!");
			e.printStackTrace();
		}
		
		return retorno;
	}
	
	public String portal() {
		return Constantes.PORTAL;
	}
	
	public String salvar() {
		return "";
	}
	
	public Conta getConta() {
		return conta;
	}

	public void setConta(Conta conta) {
		this.conta = conta;
	}
	
	public ArrayList&lt;Conta&gt; getContaList() {
		return contaList;
	}

	public void setContaList(ArrayList&lt;Conta&gt; contaList) {
		this.contaList = contaList;
	}
	public Banco getBanco() {
		return banco;
	}

	public void setBanco(Banco banco) {
		this.banco = banco;
	}
	public ArrayList&lt;Banco&gt; getBancoList() {
		return bancoList;
	}

	public void setBancoList(ArrayList&lt;Banco&gt; bancoList) {
		this.bancoList = bancoList;
	}
	public ArrayList&lt;Tipoconta&gt; getTipoContaList() {
		return tipoContaList;
	}

	public void setTipoContaList(ArrayList&lt;Tipoconta&gt; tipoContaList) {
		this.tipoContaList = tipoContaList;
	}
	public Tipoconta getTipoconta() {
		return tipoconta;
	}

	public void setTipoconta(Tipoconta tipoconta) {
		this.tipoconta = tipoconta;
	}
}

Bean Conta(que é o bean que eu estou com problema que nao vem os valores alterados)

import org.hibernate.validator.NotEmpty;

/**
 * Conta generated by hbm2java
 */
public class Conta  implements java.io.Serializable {

	private static final long serialVersionUID = 3281258808117885832L;
	
	private int idConta;
    private Usuario usuario;
    private Tipoconta tipoconta;
    private Banco banco;
    @NotEmpty
    private String nomeConta;
    @NotEmpty
    private String agencia;
    @NotEmpty
    private String numeroConta;
    @NotEmpty
    private Date dataAbertura;
    private Float saldo;
    private String observacao;
    private char ativo;
    private Set&lt;Previsaoconta&gt; previsaocontas = new HashSet&lt;Previsaoconta&gt;(0);
    private Set&lt;Lancamentoconta&gt; lancamentocontas = new HashSet&lt;Lancamentoconta&gt;(0);

    public Conta() {
    }

    public Conta(int idConta, Usuario usuario, Tipoconta tipoconta, Banco banco, String nomeConta, String agencia, String numeroConta, Date dataAbertura, char ativo) {
        this.idConta = idConta;
        this.usuario = usuario;
        this.tipoconta = tipoconta;
        this.banco = banco;
        this.nomeConta = nomeConta;
        this.agencia = agencia;
        this.numeroConta = numeroConta;
        this.dataAbertura = dataAbertura;
        this.ativo = ativo;
    }
    public Conta(int idConta, Usuario usuario, Tipoconta tipoconta, Banco banco, String nomeConta, String agencia, String numeroConta, Date dataAbertura, Float saldo, String observacao, char ativo, Set&lt;Previsaoconta&gt; previsaocontas, Set&lt;Lancamentoconta&gt; lancamentocontas) {
       this.idConta = idConta;
       this.usuario = usuario;
       this.tipoconta = tipoconta;
       this.banco = banco;
       this.nomeConta = nomeConta;
       this.agencia = agencia;
       this.numeroConta = numeroConta;
       this.dataAbertura = dataAbertura;
       this.saldo = saldo;
       this.observacao = observacao;
       this.ativo = ativo;
       this.previsaocontas = previsaocontas;
       this.lancamentocontas = lancamentocontas;
    }
   
    public int getIdConta() {
        return this.idConta;
    }
    
    public void setIdConta(int idConta) {
        this.idConta = idConta;
    }
    public Usuario getUsuario() {
        return this.usuario;
    }
    
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    public Tipoconta getTipoconta() {
        return this.tipoconta;
    }
    
    public void setTipoconta(Tipoconta tipoconta) {
        this.tipoconta = tipoconta;
    }
    public Banco getBanco() {
        return this.banco;
    }
    
    public void setBanco(Banco banco) {
        this.banco = banco;
    }
    public String getNomeConta() {
        return this.nomeConta;
    }
    
    public void setNomeConta(String nomeConta) {
        this.nomeConta = nomeConta;
    }
    public String getAgencia() {
        return this.agencia;
    }
    
    public void setAgencia(String agencia) {
        this.agencia = agencia;
    }
    public String getNumeroConta() {
        return this.numeroConta;
    }
    
    public void setNumeroConta(String numeroConta) {
        this.numeroConta = numeroConta;
    }
    public Date getDataAbertura() {
        return this.dataAbertura;
    }
    
    public void setDataAbertura(Date dataAbertura) {
        this.dataAbertura = dataAbertura;
    }
    public Float getSaldo() {
        return this.saldo;
    }
    
    public void setSaldo(Float saldo) {
        this.saldo = saldo;
    }
    public String getObservacao() {
        return this.observacao;
    }
    
    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }
    public char getAtivo() {
        return this.ativo;
    }
    
    public void setAtivo(char ativo) {
        this.ativo = ativo;
    }
    public Set&lt;Previsaoconta&gt; getPrevisaocontas() {
        return this.previsaocontas;
    }
    
    public void setPrevisaocontas(Set&lt;Previsaoconta&gt; previsaocontas) {
        this.previsaocontas = previsaocontas;
    }
    public Set&lt;Lancamentoconta&gt; getLancamentocontas() {
        return this.lancamentocontas;
    }
    
    public void setLancamentocontas(Set&lt;Lancamentoconta&gt; lancamentocontas) {
        this.lancamentocontas = lancamentocontas;
    }

    public boolean equals(Object obj) {
    	// TODO Auto-generated method stub
    	return super.equals(obj);
    }

    public int hashCode() {
    	// TODO Auto-generated method stub
    	return super.hashCode();
    }

}

E a JSP que passa pela action acima, traz os dados corretamentes, mas ao alterar algo e jogar na mesma action acima, ainda ta com os valores antigos e nao os novos..

&lt;%@page contentType="text/html"%&gt;
&lt;%@page pageEncoding="UTF-8"%&gt;

&lt;%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib uri="http://richfaces.org/rich" prefix="rich"%&gt;
&lt;%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%&gt;

&lt;html&gt;
	&lt;head&gt;
		&lt;link href="css/atributos.css" rel="stylesheet" type="text/css"/&gt;
		&lt;script type="text/javascript"&gt;
			function jsHabilitaCampo() {
				var selectTipoConta = document.getElementById("formContasBancariasDados:idTipoConta1");
				if(selectTipoConta != null){
					var inputTipoConta = document.getElementById("formContasBancariasDados:nomeTipoConta");
					var inputTipoContaHidden = document.getElementById("formContasBancariasDados:idTipoConta");
					if (selectTipoConta.value == 1) { // Novo tipo de conta
						inputTipoContaHidden.value = 1;
						inputTipoConta.disabled = false;
					} else {
						inputTipoContaHidden.value = 0;
						inputTipoConta.value = '';
						inputTipoConta.required = false;
						inputTipoConta.disabled = true;
					}
				}
			}
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;f:view&gt;
			&lt;h:form id="formContasBancariasDados" style="width: 100%;"&gt;
				&lt;!-- Modal de informações do desenvolvedor --&gt;
				&lt;rich:modalPanel id="panel" width="350" height="190"&gt;
			        &lt;f:facet name="header"&gt;
			            &lt;h:panelGroup&gt;
			                &lt;h:outputText value="Financeiro"&gt;&lt;/h:outputText&gt;
			            &lt;/h:panelGroup&gt;
			        &lt;/f:facet&gt;
			        &lt;f:facet name="controls"&gt;
			            &lt;h:panelGroup&gt;
			                &lt;h:graphicImage value="/images/close.png" style="cursor:pointer" id="hidelink"/&gt;
			                &lt;rich:componentControl for="panel" attachTo="hidelink" operation="hide" event="onclick"/&gt;
			            &lt;/h:panelGroup&gt;
			        &lt;/f:facet&gt;
					&lt;rich:tabPanel switchType="client" width="97%" immediate="true"&gt;
						&lt;rich:tab label="Informações Desenvolvedor" immediate="true"&gt;
							&lt;rich:separator/&gt;
					        &lt;h:outputText value="Nome: Tiago Anozé Emerick" style="font-size: 13;"&gt;&lt;/h:outputText&gt;
					        <br/>
							&lt;rich:separator height="3" lineType="dotted"/&gt;
					        &lt;h:outputText value="Email: [email removido]" style="font-size: 13;"&gt;&lt;/h:outputText&gt;
					        <br/>
							&lt;rich:separator height="3" lineType="dotted"/&gt;
					        &lt;h:outputText value="Telefone: ([telefone removido]" style="font-size: 13;"&gt;&lt;/h:outputText&gt;
							&lt;rich:separator /&gt;
						&lt;/rich:tab&gt;
						&lt;rich:tab label="Mude a cara do seu sistema" immediate="true"&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="DEFAULT" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/cinza.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="plain" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/branco.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="emeraldTown" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/verde.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="blueSky" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/azulClaro.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="wine" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/verdeFumaca.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="japanCherry" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/rosa.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="ruby" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/vermelho.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;h:commandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="classic" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/azulEscuro.JPG" style="border: none" /&gt;
							&lt;/h:commandLink&gt;
							&lt;a4j:htmlCommandLink immediate="true"&gt;
						        &lt;a4j:actionparam name="skin" value="deepMarine" assignTo="#{skinBean.skin}" /&gt;
						        &lt;h:graphicImage value="/images/skins/aqua.JPG" style="border: none" /&gt;
							&lt;/a4j:htmlCommandLink&gt;
						&lt;/rich:tab&gt;
					&lt;/rich:tabPanel&gt;

			    &lt;/rich:modalPanel&gt;
				&lt;rich:panel&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputLink value="#" id="link"&gt;
					        Financeiro
					        &lt;rich:componentControl for="panel" attachTo="link" operation="show" event="onclick"/&gt;
					    &lt;/h:outputLink&gt;
					&lt;/f:facet&gt;

					&lt;div id="containerMsg" align="left"&gt;
						&lt;h:panelGrid columns="1"&gt;
							&lt;h:messages id="msgs" globalOnly="true" styleClass="msgGlobalError" /&gt;
						&lt;/h:panelGrid&gt;
					&lt;/div&gt;
					&lt;h:panelGrid columns="3"&gt;
						&lt;h:outputLabel for="nomeBanco" value="Banco" styleClass="inputText"/&gt;				
						&lt;h:selectOneMenu id="nomeBanco" value="#{contaViewLogic.conta.banco}" required="true"&gt;
							&lt;f:selectItem itemValue="" itemLabel="Atual: #{contaViewLogic.conta.banco.nomeBanco}"/&gt;
							&lt;f:selectItems value="#{contaViewLogic.bancoList}"/&gt;
							&lt;f:converter converterId="bancoConverter" /&gt; 
						&lt;/h:selectOneMenu&gt;
						&lt;rich:message for="nomeBanco"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;

						&lt;h:outputLabel for="nomeTipoConta" value="Tipo conta" styleClass="inputText"/&gt;
						&lt;h:selectOneMenu id="nomeTipoConta" value="#{contaViewLogic.conta.tipoconta}" required="true" onchange="jsHabilitaCampo();"&gt;
							&lt;f:selectItem itemValue=""  itemLabel="Atual: #{contaViewLogic.conta.tipoconta.nomeTipoConta}"/&gt;
							&lt;f:selectItems value="#{contaViewLogic.tipoContaList}"/&gt;
							&lt;f:converter converterId="tipoContaConverter" /&gt; 
						&lt;/h:selectOneMenu&gt;
						&lt;rich:message for="nomeTipoConta"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;

						&lt;h:outputLabel for="nomeTipoConta1" value="Novo tipo conta*" styleClass="inputText"/&gt;
						&lt;h:inputText id="nomeTipoConta1" value="#{tipoconta.nomeTipoConta}" required="true" disabled="true" requiredMessage="Campo 'Novo tipo conta' obrigatório" style="width: 250px;"/&gt;
						&lt;rich:message for="nomeTipoConta1"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;		

						&lt;h:outputLabel for="nomeConta" value="Nome conta*" styleClass="inputText"/&gt;
						&lt;h:inputText id="nomeConta" value="#{contaViewLogic.conta.nomeConta}" required="true" requiredMessage="Campo 'Nome conta' obrigatório" style="width: 250px;"&gt;
							&lt;rich:beanValidator summary="Invalid nomeConta"/&gt;
						&lt;/h:inputText&gt;
						&lt;rich:message for="nomeConta"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;		

						&lt;h:outputLabel for="agencia" value="Agência*" styleClass="inputText"/&gt;
						&lt;h:inputText id="agencia" value="#{contaViewLogic.conta.agencia}" required="true" requiredMessage="Campo 'Agência' obrigatório" style="width: 250px;"&gt;
							&lt;rich:beanValidator summary="Invalid agencia"/&gt;
						&lt;/h:inputText&gt;
						&lt;rich:message for="agencia"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;		

						&lt;h:outputLabel for="numeroConta" value="Número conta*" styleClass="inputText"/&gt;
						&lt;h:inputText id="numeroConta" value="#{contaViewLogic.conta.numeroConta}" required="true" requiredMessage="Campo 'Número conta' obrigatório" style="width: 250px;"&gt;
							&lt;rich:beanValidator summary="Invalid numeroConta"/&gt;
						&lt;/h:inputText&gt;
						&lt;rich:message for="numeroConta"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;		

						&lt;h:outputLabel for="observacao" value="Observação*" styleClass="inputText"/&gt;
						&lt;h:inputTextarea id="observacao" value="#{contaViewLogic.conta.observacao}" requiredMessage="Campo 'Observação' obrigatório" style="width: 250px;"/&gt;
						&lt;rich:message for="observacao"&gt;
	                        &lt;f:facet name="passedMarker"&gt;
	                            &lt;h:graphicImage value="/images/passed.gif" /&gt; 
	                        &lt;/f:facet&gt;
	                        &lt;f:facet name="errorMarker"&gt;
	                            &lt;h:graphicImage value="/images/error.gif" /&gt;   
	                        &lt;/f:facet&gt;
	                    &lt;/rich:message&gt;		

					&lt;/h:panelGrid&gt;
					<br>
					&lt;rich:toolBar&gt;
						&lt;h:commandButton id="buttonAlterarConta" immediate="true" value="Alterar" action="#{contaViewLogic.alterar}"/&gt;
						&lt;h:commandButton id="buttonVoltar" immediate="true" value="Voltar" action="#{contaViewLogic.abrirListagem}"/&gt;
					&lt;/rich:toolBar&gt;
				&lt;/rich:panel&gt;
			&lt;/h:form&gt;
		&lt;/f:view&gt;
	&lt;/body&gt;
&lt;/html&gt;

Nesta JSP tem um esquema com o javaScript pra habilitar um campo, mas esquece isso.. tava em fase desenvolvimento.. nada a ver, ok?!

Quem puder me ajudar!!
Agradeco mt!

Criado 2 de abril de 2008
Ultima resposta 5 de nov. de 2008
Respostas 11
Participantes 5