H:selectOneMenu - exibir string mas enviar inteiro

16 respostas
C

Bom dia pessoal.

Estou precisando fazer um campo do tipo combo exibir a descrição de um campo da tabela mas quando adiciono/altero o registro, deve enviar o código.
Isso porque esse campo é referente a uma FK.

Estou fazendo como abaixo mas dessa forma o registro é gravado esse campo da tabela como null.

<h:outputLabel value="Setor:" for="setor" />
     <h:selectOneMenu id="setor" value="#{setorBean.setor.nome}" valueChangeListener="#{setorBean.setNome}"
     rendered="#{!empty contextoBean}" onchange="submit()" requiredMessage="Informe o seu setor de trabalho">
     <f:selectItems value="#{setorBean.lista}" var="setor" itemValue="#{setor.nome}" itemLabel="#{setor.nome}" />
</h:selectOneMenu>

Abraço a todos e agradeço qualquer dica.

16 Respostas

A

cara,
vc tem que fazer o seguinte

<h:selectOneMenu id="setor" value="#{setorBean.setor.id}" 
     rendered="#{!empty contextoBean}" requiredMessage="Informe o seu setor de trabalho">  
     <f:selectItems value="#{setorBean.lista}" var="setor" itemValue="#{setor.id}" itemLabel="#{setor.nome}" />  
</h:selectOneMenu>

e vc vai ter que criar um converter.

t+

C

Alisson, desculpe mas como ainda estou estudando JSF ainda não sei fazer um converter.
Como incluo um no JSF? Pode me passar algum exemplo bem simples ou dar uma dica de onde pesquisar?

Abraço.

A

cara,

segue um exemplo, http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/

t+

C

Beleza.

Por partes então.
Alterei o jsf conforme sua sugestão.

Agora estou recebendo a seguinte mensagem de erro:

javax.el.PropertyNotFoundException: The class 'gestao.web.SetorBean' does not have the property 'setNome'.
	at javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:661)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:290)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
	at com.sun.faces.facelets.el.ELText$ELTextVariable.toString(ELText.java:214)
	at com.sun.faces.facelets.el.ELText$ELTextComposite.toString(ELText.java:155)
	at com.sun.faces.facelets.compiler.CommentInstruction.write(CommentInstruction.java:77)
	at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:302)
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at gestao.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:42)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Dúvida. Onde você colocou #{setorBean.setor.id} e #{setor.id} o id é referente ao nome da coluna na tabela que é minha chave secundária?

A

cara,

posta seu codigo que vc fez.
mas o id, sera o id referente a opção escolhida no seu combobox.

t+

C

OK.

Abaixo o xhtml

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

<ui:composition template="/templates/interna.xhtml">
	<ui:define name="titulo">Cadastro de Usuários</ui:define>
	<ui:define name="corpo">
	<h:form id="cadastro">
		<h:messages />
		<h:inputHidden value="#{usuarioBean.usuario.codigo}" />
		<h:inputHidden value="#{usuarioBean.usuario.ativo}" />
		<h:inputHidden value="#{usuarioBean.destinoSalvar}" />
		
		<h:panelGrid columns="2">
			<h:outputLabel value="Nome:" for="nome" />
			<h:inputText id="nome" label="Nome" value="#{usuarioBean.usuario.nome}" size="50" maxlength="100"
				required="true" requiredMessage="Informe seu nome">
				<f:validateLength minimun="10" maximum="100" />
			</h:inputText>
			
			<h:outputLabel value="Papel:" for="papel" />
			<h:inputText id="papel" label="Papel" value="#{usuarioBean.usuario.papel}" size="50" maxlength="30"
				rendered="true" rerequiredMessage="Informe seu papel">
				<f:validateLength maximum="30" />
			</h:inputText>
			
			<h:outputLabel value="Data Nascimento:" for="data" />
			<h:inputText id="data" label="Data Nascimento" value="#{usuarioBean.usuario.nascimento}" size="8"
				maxlength="10" required="false" requiredMessage="Informe sua data de nascimento">
				<f:convertDateTime dateStyle="short" timeZone="America/Sao_Paulo" pattern="dd/MM/yyyy" />
			</h:inputText>
			
			<h:outputLabel value="Celular:" for="celular" />
			<h:inputText id="celular" label="Celular" value="#{usuarioBean.usuario.celular}" size="11" maxlength="13"
				requiredMessage="Informe seu número de telefone celular">
				<f:validateLength minimun="13" maximum="13" />
			</h:inputText>
			
			<h:outputLabel value="E-mail:" for="email" />
			<h:panelGroup>
				<h:inputText id="email" label="E-mail" value="#{usuarioBean.usuario.email}" size="50"
					maxlength="50" required="true" validatorMessage="E-mail inválido" requiredMessage="Informe seu endereço de e-mail">
					<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+" />
				</h:inputText>
				<h:message for="email" />
			</h:panelGroup>
			
			<h:outputLabel value="Idioma:" for="idioma" />
			<h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}" requiredMessage="Informe seu idioma">
				<f:selectItem itemValue="pt_BR" itemLabel="Português" />
				<f:selectItem itemValue="en_US" itemLabel="English" />
			</h:selectOneMenu>
			
			<h:outputLabel value="Setor:" for="setor" />
			<h:selectOneMenu id="setor" value="#{setorBean.setor.codigo}" valueChangeListener="#{setorBean.setNome}"
				rendered="#{!empty contextoBean}" onchange="submit()" requiredMessage="Informe o seu setor de trabalho">
			  <f:selectItems value="#{setorBean.lista}" var="setor" itemValue="#{setor.codigo}" itemLabel="#{setor.nome}" />
			</h:selectOneMenu>			
			
			<h:outputLabel value="Login:" for="login" />
			<h:inputText id="login" label="Login" value="#{usuarioBean.usuario.login}" size="15" maxlength="15"
				required="true" validatorMessage="Login deve ter no mínimo 5 e no máximo 15 caracteres e só pode
				ter os símbolos '.' e '_'." requiredMessage="Informe o seu login">
				<f:validateRegex pattern="([a-z]|[0-9]|[.][_]){5,15}" />
			</h:inputText>
			
			<h:outputLabel value="Senha:" for="senha" />
			<h:inputSecret id="Senha" value="#{usuarioBean.usuario.senha}" size="10" maxlength="10" required="true"
				redisplay="true" requiredMessage="informe a sua senha"/>
				
			<h:outputLabel value="Confirmar Senha:" for="confirmarsenha" />
			<h:inputSecret id="confirmarsenha" label="Confirmar Senha" value="#{usuarioBean.confirmarSenha}"
				size="10" maxlength="10" required="true" redisplay="true" requiredMessage="Informe sua senha novamentes"/>			
		</h:panelGrid>
		<h:commandButton action="#{usuarioBean.salvar}" value="Salvar" />
	</h:form>
	</ui:define>
</ui:composition>
</html>

Abaixo a classe Usuario

package gestao.usuario;

import gestao.setor.Setor;

import java.util.Date;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;

import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

/**
 * @author Cristiano
 *
 */
@Entity
public class Usuario implements Serializable {

	private static final long serialVersionUID = -6030139229635543710L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "codigo", nullable = false, length = 10)
	private Integer codigo;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@OnDelete(action = OnDeleteAction.CASCADE)
	@JoinColumn(name = "setor", nullable = true)
	@ForeignKey(name = "fk_usuario_setor")
	private Setor setor;
	
	@Column(name = "papel", length = 30)
	private String papel;
	
	@Column(name = "nome", length = 100)
	private String nome;
	
	@Column(name = "email", length = 50)
	private String email;
	
	@org.hibernate.annotations.NaturalId
	@Column(name = "login", length = 15)
	private String login;
	
	@Column(name = "senha", length = 10)
	private String senha;
	
	@Temporal(TemporalType.DATE)
	private Date nascimento;
	
	@Column(name = "celular", length = 13)
	private String celular;
	
	@Column(name = "idioma", length = 15)
	private String idioma;
	
	@Column(name = "ativo", length = 1)
	private boolean ativo;
	
	@ElementCollection(targetClass = String.class)
	@JoinTable(
			name="usuario_permissao",
			uniqueConstraints = {@UniqueConstraint(columnNames = {"usuario","permissao"})},
			joinColumns = @JoinColumn(name = "usuario"))
	@Column(name = "permissao", length=50)	
	private Set<String> permissao = new HashSet<String>();
	
	/**
	 * @return the codigo
	 */
	public Integer getCodigo() {
		return codigo;
	}
	
	/**
	 * @param codigo the codigo to set
	 */
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	
	/**
	 * @return the setor
	 */
	public Setor getSetor() {
		return setor;
	}
	
	/**
	 * @param setor the setor to set
	 */
	public void setSetor(Setor setor) {
		this.setor = setor;
	}
	
	/**
	 * @return the papel
	 */
	public String getPapel() {
		return papel;
	}
	
	/**
	 * @param papel the papel to set
	 */
	public void setPapel(String papel) {
		this.papel = papel;
	}
	
	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}
	
	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}
	
	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	
	/**
	 * @return the login
	 */
	public String getLogin() {
		return login;
	}
	
	/**
	 * @param login the login to set
	 */
	public void setLogin(String login) {
		this.login = login;
	}
	
	/**
	 * @return the senha
	 */
	public String getSenha() {
		return senha;
	}
	
	/**
	 * @param senha the senha to set
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	/**
	 * @return the nascimento
	 */
	public Date getNascimento() {
		return nascimento;
	}
	
	/**
	 * @param nascimento the nascimento to set
	 */
	public void setNascimento(Date nascimento) {
		this.nascimento = nascimento;
	}
	
	/**
	 * @return the celular
	 */
	public String getCelular() {
		return celular;
	}
	
	/**
	 * @param celular the celular to set
	 */
	public void setCelular(String celular) {
		this.celular = celular;
	}
	
	/**
	 * @return the idioma
	 */
	public String getIdioma() {
		return idioma;
	}
	
	/**
	 * @param idioma the idioma to set
	 */
	public void setIdioma(String idioma) {
		this.idioma = idioma;
	}
	
	/**
	 * @return the ativo
	 */
	public boolean isAtivo() {
		return ativo;
	}
	
	/**
	 * @param ativo the ativo to set
	 */
	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}
	
	/**
	 * @return the permissao
	 */
	public Set<String> getPermissao() {
		return permissao;
	}
	
	/**
	 * @param permissao the permissao to set
	 */
	public void setPermissao(Set<String> permissao) {
		this.permissao = permissao;
	}
	
	/**
	 * @return the serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (ativo ? 1231 : 1237);
		result = prime * result + ((celular == null) ? 0 : celular.hashCode());
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result + ((email == null) ? 0 : email.hashCode());
		result = prime * result + ((idioma == null) ? 0 : idioma.hashCode());
		result = prime * result + ((login == null) ? 0 : login.hashCode());
		result = prime * result
				+ ((nascimento == null) ? 0 : nascimento.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + ((papel == null) ? 0 : papel.hashCode());
		result = prime * result
				+ ((permissao == null) ? 0 : permissao.hashCode());
		result = prime * result + ((senha == null) ? 0 : senha.hashCode());
		result = prime * result + ((setor == null) ? 0 : setor.hashCode());
		return result;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Usuario other = (Usuario) obj;
		if (ativo != other.ativo)
			return false;
		if (celular == null) {
			if (other.celular != null)
				return false;
		} else if (!celular.equals(other.celular))
			return false;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (email == null) {
			if (other.email != null)
				return false;
		} else if (!email.equals(other.email))
			return false;
		if (idioma == null) {
			if (other.idioma != null)
				return false;
		} else if (!idioma.equals(other.idioma))
			return false;
		if (login == null) {
			if (other.login != null)
				return false;
		} else if (!login.equals(other.login))
			return false;
		if (nascimento == null) {
			if (other.nascimento != null)
				return false;
		} else if (!nascimento.equals(other.nascimento))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (papel == null) {
			if (other.papel != null)
				return false;
		} else if (!papel.equals(other.papel))
			return false;
		if (permissao == null) {
			if (other.permissao != null)
				return false;
		} else if (!permissao.equals(other.permissao))
			return false;
		if (senha == null) {
			if (other.senha != null)
				return false;
		} else if (!senha.equals(other.senha))
			return false;
		if (setor == null) {
			if (other.setor != null)
				return false;
		} else if (!setor.equals(other.setor))
			return false;
		return true;
	}
}

Abaixo a classe UsuarioBean

package gestao.web;

import java.util.List;
import java.util.Set;

import gestao.usuario.Usuario;
import gestao.usuario.UsuarioRN;
import gestao.util.DAOException;
import gestao.util.RNException;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean(name="usuarioBean")
@RequestScoped
public class UsuarioBean {
	private Usuario usuario = new Usuario();
	private String confirmarSenha;
	private List<Usuario> lista;
	private String destinoSalvar;
	private String permissao;
	/**
	 * @return usuario
	 */
	public String novo() {
		this.destinoSalvar = "usuarioSucesso";
		this.usuario = new Usuario();
		this.usuario.setAtivo(true);
		return "usuario";
	}
	/** 
	 * @return usuário a ser editado
	 */
	public String editar() {
		this.confirmarSenha = this.usuario.getSenha();
		return "/publico/usuario";
	}
	/**
	 * 
	 * @return usuarioSucesso
	 */
	public String salvar() throws DAOException {
		FacesContext context = FacesContext.getCurrentInstance();
		String senha = this.usuario.getSenha();
		if (!senha.equals(this.confirmarSenha)) {
			FacesMessage facesMessage = new FacesMessage("A senha não foi confirmada corretamente");
			context.addMessage(null, facesMessage);
			return null;
		}
		UsuarioRN usuarioRN = new UsuarioRN();
		usuarioRN.salvar(this.usuario);
		return this.destinoSalvar;
	}
	/**
	 * @return Exclui o usuário
	 */
	public String excluir() throws RNException {
		UsuarioRN usuarioRN = new UsuarioRN();
		usuarioRN.excluir(this.usuario);
		this.lista = null;
		return null;
	}
	/**
	 * @return Ativa o usuário
	 */
	public String ativar() throws DAOException {
		if (this.usuario.isAtivo()) {
			this.usuario.setAtivo(false);
		} else {
			this.usuario.setAtivo(true);
		}
		UsuarioRN usuarioRN = new UsuarioRN();
		usuarioRN.salvar(this.usuario);
		return null;
	}
	public List<Usuario> getLista() {
		if (this.lista == null) {
			UsuarioRN usuarioRN = new UsuarioRN();
			this.lista = usuarioRN.listar();
		}
		return this.lista;
	}
	public String atribuiPermissao(Usuario usuario, String permissao) {
		this.usuario = usuario;
		Set<String> permissoes = this.usuario.getPermissao();
		if (permissoes.contains(permissao)) {
			permissoes.remove(permissao);
		} else {
			permissoes.add(permissao);
		}
		return null;
	}
	/**
	 * @return the usuario
	 */
	public Usuario getUsuario() {
		return usuario;
	}
	/**
	 * @param usuario the usuario to set
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	/**
	 * @return the confirmarSenha
	 */
	public String getConfirmarSenha() {
		return confirmarSenha;
	}
	/**
	 * @param confirmarSenha the confirmarSenha to set
	 */
	public void setConfirmarSenha(String confirmarSenha) {
		this.confirmarSenha = confirmarSenha;
	}
	public String getDestinoSalvar() {
		return destinoSalvar;
	}
	public void setDestinoSalvar(String destinoSalvar) {
		this.destinoSalvar = destinoSalvar;
	}
	public String getPermissao() {
		return permissao;
	}
	public void setPermissao(String permissao) {
		this.permissao = permissao;
	}
}

Abaixo a classe Setor

package gestao.setor;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Setor implements Serializable {
	
	private static final long serialVersionUID = -8570149793063872851L;

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "codigo", nullable = false, length = 10)
    private Integer codigo;
	
	@Column(name = "nome", length = 50)
    private String nome;

	/**
	 * @return the codigo
	 */
	public Integer getCodigo() {
		return codigo;
	}

	/**
	 * @param codigo the codigo to set
	 */
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Setor other = (Setor) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		return true;
	}	
}

E finalmente a classe SetorBean

package gestao.web;

import java.util.List;

import gestao.setor.Setor;
import gestao.setor.SetorRN;
import gestao.util.DAOException;
import gestao.util.RNException;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="setorBean")
@RequestScoped
public class SetorBean {
	private Setor setor = new Setor();
	private List<Setor> lista;
	private String destinoSalvar;
	/**
	 * @return setor
	 */
	public String novo() {
		this.setor = new Setor();
		return "setor";
	}
	/** 
	 * @return setor a ser editado
	 */
	public String editar() {
		return "/publico/setor";
	}
	/**
	 * 
	 * @return 
	 */
	public String salvar() throws DAOException {
		SetorRN setorRN = new SetorRN();
		setorRN.salvar(this.setor);
		return this.destinoSalvar;
	}
	/**
	 * @return Exclui o usuário
	 */
	public String excluir() throws RNException {
		SetorRN setorRN = new SetorRN();
		setorRN.excluir(this.setor);
		this.lista = null;
		return null;
	}
	public List<Setor> getLista() {
		if (this.lista == null) {
			SetorRN setorRN = new SetorRN();
			this.lista = setorRN.listar();
		}
		return this.lista;
	}
	/**
	 * @return the setor
	 */
	public Setor getSetor() {
		return setor;
	}
	/**
	 * @param setor the setor to set
	 */
	public void setSetor(Setor setor) {
		this.setor = setor;
	}
	/**
	 * @return the destinoSalvar
	 */
	public String getDestinoSalvar() {
		return destinoSalvar;
	}
	/**
	 * @param destinoSalvar the destinoSalvar to set
	 */
	public void setDestinoSalvar(String destinoSalvar) {
		this.destinoSalvar = destinoSalvar;
	}
	/**
	 * @param lista the lista to set
	 */
	public void setLista(List<Setor> lista) {
		this.lista = lista;
	}	
}
A

cara,

vou te passar alguma dica para seu codigo
1 - no seu codigo de combobox deve ficar assim

<h:selectOneMenu id="setor" value="#{usuarioBean.usuario.setor.codigo}"  converter="setorConverter"   rendered="#{!empty contextoBean}" requiredMessage="Informe o seu setor de trabalho">  
              <f:selectItems value="#{usuarioBean.listaSetor}" var="setor" itemValue="#{setor.codigo}" itemLabel="#{setor.nome}" />  
            </h:selectOneMenu>

vc vai ter que criar um custom converter, segue um exemplo http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/
na sua classe Usuario vc tem que instanciar o objeto setor

@Entity  
public class Usuario implements Serializable { 
...
public Usuario(){
this.setor = new Setor();
}
}

PS: cara tente fazer 1 ManagedBean por “Caso de Uso” e so utilizar 1 por pagina.

2 - Quando vc usa facelets vc nao precisa ficar repetindo a tag html e xml nao, so fazer assim

<ui:composition 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:p="http://primefaces.prime.com.tr/ui" 
				template="/paginas/layout.xhtml">
     <ui:define name="conteudo">
     </ui:define>
</ui:composition>

espero ter te ajudado

t+

C

Bom dia.

Ainda não está funcionando.
Criei a classe converter assim:

package gestao.web.converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

import gestao.setor.Setor;
import gestao.setor.SetorRN;

@FacesConverter(forClass = Setor.class)
public class SetorConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value != null && value.trim().length() > 0) {
			Integer codigo = Integer.valueOf(value);
			try {
				SetorRN setorRN = new SetorRN();
				return setorRN.carregar(codigo);
			} catch (Exception e) {
				throw new ConverterException("Não foi possível encontrar o setor de código "+ value +". "+ e.getMessage());
			}
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value != null) {
			Setor setor = (Setor) value;
			return setor.getCodigo().toString();
		}
		return "";
	}
}

E seguindo o exemplo em http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/, deixei o combo assim:

<h:outputLabel value="Setor:" for="setor" />
			<h:selectOneMenu id="setor" value="#{usuarioBean.usuario.setor.codigo}" rendered="#{!empty contextoBean}" requiredMessage="Informe o seu setor de trabalho">
			  <f:selectItems value="#{usuarioBean.lista}" var="setor" itemValue="#{setor.codigo}" itemLabel="#{setor.nome}" />
			  <f:converter converterId="gestao.web.converter.SetorConverter" />
			</h:selectOneMenu>

Mas no combo está aparecendo um hint assim: “gestao.web.converter.SetorConverter” converter is not registered.

O que está faltando?

J

No seu Bean/Classe o atributo que contém os valores que serão listados pelo selectOneMenu deve ser dessa forma

SelectItem item1 = new SelectItem(autorizacao.getId(), autorizacao.getAuthority());

O primeiro intem(autorizacao.getId) é o que vai ser enviado para algum lugar, Já o segundo item(autroizacao.getAuthority) é o que vai aparecer no selectOneMenu

Diguinho.Max

Bom dia! se eu entendi o que você quer.

poderia fazer com uma lista de selectItem assin vc colocaria o value e a descrição. um exemplo.
private List<SelectItem> produtos = new ArrayList<SelectItem>();

//crie os gette e sette 
public List<SelectItem> getProdutos() {
		List<Produto> lstProdutos = bp.listarTodos(); // aqui é a lista que vc recupera do banco.
		produtos.clear();
		for (int i = 0; i < lstProdutos.size(); i++) {
			Produto p = lstProdutos.get(i);
			produtos.add(new SelectItem(p.getCodigo(), p.getDescricao()));
		}
		return produtos;
	}
A

cara,

faz assim

@FacesConverter("SetorConverter")  
public class SetorConverter implements Converter {  
  
    @Override  
    public Object getAsObject(FacesContext context, UIComponent component, String value) {  
        if (value != null && value.trim().length() > 0) {  
            Integer codigo = Integer.valueOf(value);  
            try {  
                SetorRN setorRN = new SetorRN();  
                return setorRN.carregar(codigo);  
            } catch (Exception e) {  
                throw new ConverterException("Não foi possível encontrar o setor de código "+ value +". "+ e.getMessage());  
            }  
        }  
        return null;  
    }  
  
    @Override  
    public String getAsString(FacesContext context, UIComponent component, Object value) {  
        if (value != null) {  
            Setor setor = (Setor) value;  
            return setor.getCodigo().toString();  
        }  
        return "";  
    }  
}
<h:outputLabel value="Setor:" for="setor" />  
            <h:selectOneMenu id="setor" value="#{usuarioBean.usuario.setor.codigo}" converter="SetorConverter" rendered="#{!empty contextoBean}" requiredMessage="Informe o seu setor de trabalho">  
              <f:selectItems value="#{usuarioBean.lista}" var="setor" itemValue="#{setor.codigo}" itemLabel="#{setor.nome}" />  
            </h:selectOneMenu>

testa ai e ve se funciona.

t+

J

Sim, observe meu código

private List<SelectItem> autorizacao;
//Método Construtor
	public UsuarioBean(){
		
		this.autorizacao = getListarAutorizacao();	
		
	}
public List<SelectItem> getListarAutorizacao(){
ArrayList<SelectItem> autorizacoes = new ArrayList<SelectItem>();
		AutorizacaoDao dao = new AutorizacaoDaoImpl();
		//Atribui as autorizações a um list
		List<Autorizacao> resultado = (List<Autorizacao>) dao.listarAutorizacao();
		
		//Adiciona cada autorização e seu id a um objeto do tipo SelectItem que será usado por um selectOneMenu
		for(Autorizacao autorizacao : resultado)
		{
			SelectItem item1 = new SelectItem(autorizacao.getId(), autorizacao.getAuthority());
			autorizacoes.add(item1);
		}

		return autorizacoes;
	}

Meu selectOneMenu

<h:selectOneMenu id="perfilUsuario" value="#{usuarioBean.idAut}">
	    			<f:selectItem id="opPerfil" itemLabel="Selecione" />
	    			<f:selectItems id="opPerfil2" value="#{usuarioBean.autorizacao}" />	
	    		</h:selectOneMenu>

No selectItem ele vai listar apenas a segunda opção(autorizacao.getAuthority()) lá do meu atributo na classe

Ao fazer um submit, ele enviará a primeira opção!

Diguinho.Max

Concordo com Jonatex.

J

Deu certo ai?

C

Agora está dando o seguinte erro:

GRAVE: Error Rendering View[/publico/usuario.xhtml]
java.lang.ClassCastException: java.lang.Integer cannot be cast to gestao.setor.Setor
	at gestao.web.converter.SetorConverter.getAsString(SetorConverter.java:45)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:519)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:534)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:792)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:844)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:298)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at gestao.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:42)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Me parece alguma caca na classe SetorConverter mas não sei o que é.
Só lembrando, estou tentando exibir a descrição do campo na tela mas no momento do submit, é o código que deve ser gravado na tabela.

henrique_ganso

O amigo, beleza?
tu conseguiu resolver seu problema, estou na mesma situação, será que poderia postar sua solução?

Obrigado

Criado 24 de outubro de 2011
Ultima resposta 26 de abr. de 2012
Respostas 16
Participantes 5