[RESOLVIDO]Acessando variável do Bean - Property 'confirmarsenha'

Pessoal,

Obs. NÃO ESTOU QUERENDO INCLUIR ESTE CAMPO NA CLASSE USUARIO E FAZER O GET E SET, POIS NAO QUERO INCLUIR ESTE CAMPO NA MINHA BASE DE DADOS

public class UsuarioBean {

private Usuario usuario = new Usuario();
BancoDeClientes bdc = new BancoDeClientes();
private String confirmarsenha;

estou tentando acessar uma variavel do meu bean, só que esta dando erro :

exception

javax.servlet.ServletException: /usuario.xhtml @58,88 value="#{usuarioBean.confirmarsenha}": Property ‘confirmarsenha’ not found on type bean.UsuarioBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)

root cause

javax.el.PropertyNotFoundException: /usuario.xhtml @58,88 value="#{usuarioBean.confirmarsenha}": Property ‘confirmarsenha’ not found on type bean.UsuarioBean
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
javax.faces.component.UIOutput.getValue(UIOutput.java:169)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)

package bean;

import java.util.List;

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

import dao.UsuarioRN;

import banco.BancoDeClientes;

import modelo.Cliente;
import modelo.Usuario;

@ManagedBean(name = "usuarioBean")
@RequestScoped
public class UsuarioBean {
	
	private Usuario usuario = new Usuario();
	BancoDeClientes bdc = new BancoDeClientes();
	private String confirmarsenha;
	private List<Usuario> lista;
	
	
    public Usuario getUsuario(){
        return usuario;
     }

     public void setUsuario (Usuario usuario){
        this.usuario = usuario;
     }     
	
	
	
	public String salvar(){
		FacesContext context = FacesContext.getCurrentInstance();
		String senha = usuario.getSenha();
		if (! senha.equals(confirmarsenha)){
			FacesMessage facesMessage = new FacesMessage("Confirmar");
			context.addMessage(null, facesMessage);
			return null;
		}
		bdc.salvaruser(usuario);
		return "UsuarioCadastrado";
	}
	
	public List<Usuario> getLista(){
		if (lista == null) {
			 UsuarioRN usuarioRN = new UsuarioRN();
			 lista = usuarioRN.listar();	
			   
		}
		return lista;
	}
	

}
<?xml version="1.0" encoding="ISO-8859-1" ?>
<html xmlns="http://www.w3.org/1999/xhtml"            
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
      <h:head>
         <title>
           Cadastro de Usuário
         </title>
      </h:head>
      
        <h:body>
        
           <h1> Cadastramento de Usuário</h1>
           <h:form id="cadastro">
                  <h:messages />
                  <h:inputHidden value="#{usuarioBean.usuario.idUsuario}" />
                  <h:inputHidden value="#{usuarioBean.usuario.estatus}" />
                  <h:panelGrid columns="2">                
                  		<h:outputLabel value="Nome" for= "nome"/>
                  		<h:inputText 
                  		       id="nome" label="Nome" value="#{usuarioBean.usuario.nome}" 
                        	  size="45" maxlength="45" required="true"
                        	   
                        	  requiredMessage="Por favor, digite o nome"
                        	  validatorMessage="O nome deve conter entre 7 a 45">
                        	  
                        	  <f:validateLength minimum="7" maximum="45"></f:validateLength>
                      
                        </h:inputText>
                  
                  
                  		<h:outputLabel value="E-mail" for= "email"/>
                  		<h:panelGroup>
		                  		<h:inputText 
		                  		       id="email" label="E-mail" value="#{usuarioBean.usuario.email}" 
		                        	  size="70" maxlength="70" required="true" requiredMessage="Por favor, digite o e-mail" 
		                        	  validatorMessage="E-mail inválido">
		                        	  <f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+"/>		                      
		                        </h:inputText>
                        </h:panelGroup>
                        
                    <h:outputLabel value="idioma" for="idioma" />
                    <h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">
                         <f:selectItem  itemValue="pt_BR" itemLabel="Português"/>
                         <f:selectItem  itemValue="en_US" itemLabel="Inglês"/>
                         <f:selectItem  itemValue="es_ES" itemLabel="Espanhol"/>
                    </h:selectOneMenu>    
                        
                        
               		<h:outputLabel value="Senha:" for= "senha"/>
                  		<h:inputSecret
                  		       id="senha" label="Senha" value="#{usuarioBean.usuario.senha}" 
                        	  size="15" maxlength="15" required="true" redisplay="true" />
                        	  
               		<h:outputLabel value="Confirmar Senha:" for= "confSenha"/>
                  		<h:inputSecret
                  		       id="confSenha" label="Confirmar Senha" value="#{usuarioBean.confirmarsenha}" 
                        	  size="15" maxlength="15" required="true" redisplay="true" />
                        	                          	  
                  </h:panelGrid>
                  <h:commandButton action="${usuarioBean.salvar}" value="Salvar" />
           
           
           </h:form>
      
        </h:body>

</html>

Esse está se tornando o erro mais comum do GUJ.

seu atributo confirmarsenha não possui métodos get/set.

Sério mesmo cara?

Você não consegue reconhecer o mesmo erro??? http://www.guj.com.br/java/283810-jsf-property-usuario-not-found-on-type-bean

Você pelo menos tentou entender oq está acontecendo???

[quote=Hebert Coelho]Sério mesmo cara?

Você não consegue reconhecer o mesmo erro??? http://www.guj.com.br/java/283810-jsf-property-usuario-not-found-on-type-bean

Você pelo menos tentou entender oq está acontecendo???[/quote]

“Sho-ryu-ken-poh”…

Hebert, cadê os getters/setters? Não fez? omitiu? Precisa dos getters/setters para bean reconhecer…

Não possui get e set,

Consigo sim reconhecer o erro, só queria saber da possibilidade de fazer de uma outra forma …

Obrigado

Evandro

No JSF puro não conheço outra solução sem ter que criar get/set. Caso esteja utilizando o primefaces, só seguir o exemplo deles:
http://www.primefaces.org/showcase-labs/ui/password.jsf

A EL usa os métodos get/set para acessar os atributos do ManagedBean, na verdade o atributo nem é necessário.

Se você quiser buscar um valor qualquer pode criar um get que não está relacionado a nenhum atributo, e vai funcionar. Ex:public int getNumeroUm(){ return 1; } e sua EL vai ficar value="#{managedBean.numeroUm}"

[quote=ErickRAR]No JSF puro não conheço outra solução sem ter que criar get/set. Caso esteja utilizando o primefaces, só seguir o exemplo deles:
http://www.primefaces.org/showcase-labs/ui/password.jsf[/quote]
Não entendi, em algum lugar aí nesse exemplo do showcase ele acessa algum atributo sem usar get/set ?

[quote=digaoneves][quote=ErickRAR]No JSF puro não conheço outra solução sem ter que criar get/set. Caso esteja utilizando o primefaces, só seguir o exemplo deles:
http://www.primefaces.org/showcase-labs/ui/password.jsf[/quote]
Não entendi, em algum lugar aí nesse exemplo do showcase ele acessa algum atributo sem usar get/set ?[/quote]Rapaz, não é que eu pensei a mesma coisa?! :shock:

[quote=digaoneves][quote=ErickRAR]No JSF puro não conheço outra solução sem ter que criar get/set. Caso esteja utilizando o primefaces, só seguir o exemplo deles:
http://www.primefaces.org/showcase-labs/ui/password.jsf[/quote]
Não entendi, em algum lugar aí nesse exemplo do showcase ele acessa algum atributo sem usar get/set ?[/quote]

Não, mas ele usa o mesmo get/set para comparar se as duas senhas digitadas são iguais( a do password 5).

 <h:panelGrid columns="2" id="matchGrid">                     
            <h:outputLabel for="pwd1" value="Password 1: *" />  
            <p:password id="pwd1" value="#{passwordBean.password5}" match="pwd2" label="Password 1" required="true"/>  
  
            <h:outputLabel for="pwd2" value="Password 2: *" />  
            <p:password id="pwd2" value="#{passwordBean.password5}" label="Password 2" required="true"/>  
        </h:panelGrid>  

Assim ele não precisa criar um novo get/set, pode usar o campo senha do Usuario mesmo.

[quote=ErickRAR]Não, mas ele usa o mesmo get/set para comparar se as duas senhas digitadas são iguais( a do password 5).

 <h:panelGrid columns="2" id="matchGrid">                     
            <h:outputLabel for="pwd1" value="Password 1: *" />  
            <p:password id="pwd1" value="#{passwordBean.password5}" match="pwd2" label="Password 1" required="true"/>  
  
            <h:outputLabel for="pwd2" value="Password 2: *" />  
            <p:password id="pwd2" value="#{passwordBean.password5}" label="Password 2" required="true"/>  
        </h:panelGrid>  

Assim ele não precisa criar um novo get/set, pode usar o campo senha do Usuario mesmo.[/quote]Ele usa o mesmo get/set pq ele está acessando o mesmo atributo. O.o
Pq ele criaria outro cara? Oo

[quote=Hebert Coelho][quote=ErickRAR]Não, mas ele usa o mesmo get/set para comparar se as duas senhas digitadas são iguais( a do password 5).

 <h:panelGrid columns="2" id="matchGrid">                     
            <h:outputLabel for="pwd1" value="Password 1: *" />  
            <p:password id="pwd1" value="#{passwordBean.password5}" match="pwd2" label="Password 1" required="true"/>  
  
            <h:outputLabel for="pwd2" value="Password 2: *" />  
            <p:password id="pwd2" value="#{passwordBean.password5}" label="Password 2" required="true"/>  
        </h:panelGrid>  

Assim ele não precisa criar um novo get/set, pode usar o campo senha do Usuario mesmo.[/quote]Ele usa o mesmo get/set pq ele está acessando o mesmo atributo. O.o
Pq ele criaria outro cara? Oo[/quote]

Se eu entendi bem, o Evandro quer que o usuario digite a senha 2 vezes para confirmar, mas quer fazer isso sem ter que criar outro get/senha pro confrmarSenha. Não sei se no JSF puro dá pra usar esse "match=“senha” para confirmar se os dos campos digitados são iguais, por isso falei que dá pra fazer com o primefaces.
Na solução dele, ele compararia a senha com o confirmarSenha, enquanto o primefaces já faz isso.

Ah, entendi.

Mas de qualquer forma o match recebe um outro componente, que precisa ter um value, então não foge de criar get/set.

[quote=digaoneves]Ah, entendi.

Mas de qualquer forma o match recebe um outro componente, que precisa ter um value, então não foge de criar get/set.[/quote]
Yep yep. Só falei porque assim não precisa criar o confirmarSenha e tal.

[quote=ErickRAR]Se eu entendi bem, o Evandro quer que o usuario digite a senha 2 vezes para confirmar, mas quer fazer isso sem ter que criar outro get/senha pro confrmarSenha. Não sei se no JSF puro dá pra usar esse "match=“senha” para confirmar se os dos campos digitados são iguais, por isso falei que dá pra fazer com o primefaces.
Na solução dele, ele compararia a senha com o confirmarSenha, enquanto o primefaces já faz isso.[/quote]

Ah, agora eu realmente entendi o que você quis dizer, Erick. :slight_smile:

Ele pode usar o mesmo value pra comparar a senha, por causa do componente do prime, sinceramente, nem eu sabia que ele fazia isso ^^

ErickRAR, agora sim eu entendi oq você quis dizer. [=

Pessoal,

resolvi dessa forma


	 public String getconfirmarsenha() {  
	        return confirmarsenha;  
	    }
	 
	    public void setconfirmarsenha(String confirmarsenha) {  
	        this.confirmarsenha = confirmarsenha;  
	    }