2011-06-20 8 views
6

tengo PostgreSQL 8.4 tabla¿Por qué siempre obtengo NULL en JSF obteniendo el campo booleano postgresql?

CREATE TABLE users 
(
    username character varying(50) NOT NULL, 
    "password" character varying(50) NOT NULL, 
    enabled boolean NOT NULL, 
    type_of_signature boolean NOT NULL, 
    companyusers2_id integer NOT NULL, 
    numberorganizac character(8) NOT NULL, 
); 

En ese Tabla I tiene sólo una fila: "" admin "" admin "; VERDADERO; VERDADERO; 1;" 12345678"

tengo APP

@Entity 
@Table(name="users") 
public class Users implements Serializable { 
    ... 
    private boolean typeOfSignature; 
    ... 

    @Column(name="type_of_signature") 
    public boolean getTypeOfSignature() { 
     return this.typeOfSignature; 
    } 

    public void setTypeOfSignature(boolean typeOfSignature) { 
     this.typeOfSignature = typeOfSignature; 
    } 
    ... 
} 

tengo JSF

<h:outputText value="Type of signature is NULL" rendered="#{curUser.typeOfSignature == null}"/> 
<h:outputText value="Type of Signature is TRUE" rendered="#{curUser.typeOfSignature}"/> 
<h:outputText value="Type of Signature is FALSE" rendered="#{!curUser.typeOfSignature}"/> 

siempre me "Tipo de firma es nulltype de la firma es FALSO "en la página de resultados.

pero también tengo mi método en el frijol

if(getCurUser().getTypeOfSignature()) 
    { 
     jpaBean.pushSignature(dataItem, 1); 
    } 
    else 
    { 
     jpaBean.pushSignature(dataItem, 2); 
    } 

y funciona a la derecha dependiendo del tipo de firma del usuario.

¿Por qué siempre obtengo NULL en JSF? ¿O soy un recién llegado y he hecho algo mal?

+0

no sé JSF, pero veo que su campo es un ' boolean', no un 'Boolean'.' getCurUser(). getTypeOfSignature() == null' sería un error de compilación en Java. ¿Es así como JSF maneja el caso de error? –

+0

He intentado 'Boolean' y' boolean'. Ambas variantes dan el mismo resultado ** El tipo de firma es NULLTipo de firma es FALSO ** –

+2

Lo siento, es malo. Debería usar '# {BEAN_NAME.curUser.typeOfSignature} ' –

Respuesta

0

¿Usted intentó:

<h:outputText value="Type of signature is True" rendered="#{true}"/> 
<h:outputText value="Type of signature is False" rendered="#{false}"/> 

?

Si esto falla, significa que algo está mal con el enlace de valor. No debería ser para elementos html básicos.

import javax.faces.component.ActionSource; 
import javax.faces.component.UIComponent; 
import javax.faces.component.ValueHolder; 
import javax.faces.component.html.HtmlOutputText; 
import javax.faces.context.FacesContext; 
import javax.faces.convert.Converter; 
import javax.faces.el.ValueBinding; 


public class MyHtmlOutputText extends HtmlOutputText { 

    public boolean isRendered() { 
     if (rendered != null) { 
      return rendered; 
     } 

     ValueBinding vb = getValueBinding("rendered"); 
     Boolean v = vb != null ? (Boolean) vb.getValue(getFacesContext()) : null; 
     return v != null ? v : DEFAULT_DISABLED; 
    } 

    public boolean getRendered() { 
     return isRendered(); 
    } 

} 

Por alguna razón, no guardo el resultado del enlace de valor. Esa razón se debe a que el valor almacenado en el estado ya no se resolverá a partir de la expresión original en un tiempo de ejecución. Eso es lo que definitivamente no queremos tener.

Allí encontrará cómo registrar su componente MyHtmlOutputText en facelets contexto: http://hanzz.lbs-logics.at/index.php?option=com_content&task=view&id=107&Itemid=31

1

me encontré con este mismo problema antes al intentar utilizar tipo booleano con JPA y JSF, se puede tratar de crear un BooleanConverter personalizada y mapee su entidad JPA con un booleano en lugar de booleano de tipo sin formato.

Aunque podría tener problemas de portabilidad al ejecutar esto con diferentes implementaciones de bases de datos, JSF y JPA. Me sugieren fuertemente que cambie su enfoque para asignar valores booleanos como cadenas en JPA:

CREATE TABLE users 
(
    username character varying(50) NOT NULL, 
    "password" character varying(50) NOT NULL, 
    enabled haracter(1) NULL, 
    type_of_signature char(1) NOT NULL, 
    companyusers2_id integer NOT NULL, 
    numberorganizac character(8) NOT NULL, 
); 

y su asignación se volvería a ser:

@Entity 
@Table(name="users") 
public class Users implements Serializable { 
    ... 
    private String typeOfSignature; 
    ... 

    @Column(name="type_of_signature") 
    public String getTypeOfSignature() { 
     return this.typeOfSignature; 
    } 

    public void setTypeOfSignature(String typeOfSignature) { 
     this.typeOfSignature = typeOfSignature; 
    } 
    ... 
} 

pueblan su registro con una fila: "" admin ";" admin " 'T'; 'T'; 1;" 12345678" después en JSF que tendrá un resultado diferente:

<h:outputText value="Type of signature is NULL" rendered="#{empty curUser.typeOfSignature}"/> 
<h:outputText value="Type of Signature is TRUE" rendered="#{curUser.typeOfSignature eq 'T'}"/> 
<h:outputText value="Type of Signature is FALSE" rendered="#{!curUser.typeOfSignature eq 'T'}"/>