[RESOLVIDO]Problema com binding de inputText do Primefaces

6 respostas
M

Boa tarde galera!

Pessoal,

estou iniciando no desenvolvimento web faz pouco tempo e já estou tendo algumas dificuldades com relação ao mesmo,

Estou criando uma telinha básica de login, mas estou com problemas eu realizar o binding de um componente de inputText do primefaces no bean.

Abaixo segue uma parte da exeption que está sendo gerada:

java.lang.ClassCastException: java.lang.String cannot be cast to javax.faces.component.UIComponent
	at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1912)
	at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1132)
	at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.createComponent(ComponentTagHandlerDelegateImpl.java:497)
	at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:157)
	at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
	at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
	at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
	at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:188)
	at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
	at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
	at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
	at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:188)

Essa é minha view:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html 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.org/ui">

    <f:view contentType="text/html">
        <h:head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <link rel="stylesheet" type="text/css" href="CSS/layout.css"/>
            <title>Controle de Apontamento de Horas no JIRA</title>
        </h:head>
        <h:body>
            <h:form id="telaLogin">
                <p:panel header="Bem Vindo!">
                    <p:messages id="messages" showDetail="true" autoUpdate="true"/>  
                    <h:panelGrid columns="2" id="loginGrid">                     
                        <h:outputLabel for="it1" value="Login:*" />  
                        <p:inputText id="it1" label="Login" binding="#{loginMB.login}" required="true"/>  
                        <h:outputLabel for="pwd1" value="Senha:*" />  
                        <p:password id="pwd1" label="Senha" binding="#{loginMB.senha}" required="true"/>  
                    </h:panelGrid>  
                    <p:commandButton id="botaoSalvar"  value="Entrar" style="font-size: 14px"/> 
                </p:panel>
            </h:form>
        </h:body>
    </f:view>
</html>

E respectivamente meu bean:

@ManagedBean
@SessionScoped
public class LoginMB {
    
    Session session;

    public LoginMB() {
        this.session = HibernateUtil.getSessionFactory().getCurrentSession();
    }
    
    private String login;
    private String senha;
    private boolean logado;

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public boolean isLogado() {
        return logado;
    }

Deve estar alguma falha da minha parte bem basica, mas eu nao estou conseguindo enxergar o problema.

Obriagado a todos pela força!

Abrass...

6 Respostas

A

Eu acho que tens que usar a propriedade value, ao invés de binding

<p:inputText id="it1" label="Login" value="#{loginMB.login}" required="true"/>
M

asandrob,

até deu certo, mas o componente de inputText de login está vindo preenchido com este valor:

org.primefaces.component.inputtext.InputText@65a0c382

E qual a diferença de fazer o bindig do componente e value?

A

Quando eu estava respondendo a tua pergunta, também me ocorreu essa dúvida, pois não uso JSF com frequencia.
Dai dei uma pesquisada aqui mesmo no GUJ e achei umas explicações bem boas…
Uma delas é essa:
http://www.guj.com.br/java/34047-jsf-value-ou-binding-
Com o binding dá pra alterar o comportamento do componente, já o value só o valor…

M

Bacana, asandrob!

Dei uma pesquisada e tbm achei artigos bem esclarecedores. Mas ainda estou encafifado pelo motivo de meu inputText carregar este valor:

org.primefaces.component.inputtext.InputText@65a0c382

Obrigado pela força.

R

Voce tem que usar um objeto da mesma classe do component. um primefaces.InputText no caso. não uma String.
O value voce aponta para o atributo login ou senha.

troque o binding por value que já irá resolver, ou veja no proprio site do primefaces. nada melhor que o showcase deles para aprender.

M

Entendi Ricardo.

Realmente o showcase deles é fera!

Obrigado pela força. Vou tentar me coçar aqui para aprender.

Um abraço…

Criado 20 de agosto de 2012
Ultima resposta 20 de ago. de 2012
Respostas 6
Participantes 3