2011-06-20 15 views
6

mam PostgreSQL 8.4 tabelaDlaczego zawsze uzyskuję NULL w JSF pobierając pole boolowskie 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, 
); 

w tej tabeli mam tylko jeden wiersz: "" Administrator "" admin "; PRAWDA; PRAWDA; 1;" 12345678"

mam JPA

@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; 
    } 
    ... 
} 

mam 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}"/> 

zawsze dotrzesz „Typ podpisu jest NULLType Signature to FALSE "na stronie wyników.

Ale ja też mam metodę w moim fasoli

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

i działa prawo w zależności od rodzaju podpisu użytkownika.

Dlaczego zawsze otrzymuję NULL w JSF? Czy jestem nowicjuszem i zrobiłem coś złego?

+0

nie wiem JSF, ale widzę, że pole to ' boolean', a nie 'Boolean'.' getCurUser(). getTypeOfSignature() == null' byłoby błędem kompilacji w Javie. Czy właśnie w ten sposób JSF obsługuje przypadek błędu? –

+0

Próbowałem już 'Boolean' i' boolean'. Oba warianty dają ten sam wynik ** Rodzaj podpisu to NULLtyp podpisu jest FAŁSZYJNY ** –

+2

Przepraszam, mój zły. Powinienem użyć '# {BEAN_NAME.curUser.typeOfSignature} ' –

Odpowiedz

0

Czy spróbować:

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

?

Jeśli to się nie powiedzie, oznacza to, że coś jest nie tak z segregatorem wartości. Nie powinno to dotyczyć podstawowych elementów HTML.

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(); 
    } 

} 

Z jakiegoś powodu nie przechowuję wyniku wiązania wartości. Powodem jest to, że wartość przechowywana w stanie i nie będzie już rozwiązana z oryginalnego wyrażenia w środowisku wykonawczym. Właśnie tego nie chcemy mieć.

Nie znajdziesz jak zarejestrować swój składnik MyHtmlOutputText w kontekście Facelets: http://hanzz.lbs-logics.at/index.php?option=com_content&task=view&id=107&Itemid=31

1

wpadłem na tym samym problemie wcześniej, kiedy próbuje użyć typu Boolean z JPA i JSF, można spróbować stworzyć niestandardowy BooleanConverter i zmapuj swoją jednostkę JPA za pomocą wartości typu Boolean zamiast typu boolean typu raw.

Nawet jeśli możesz napotkać problemy przenośności podczas uruchamiania tego z różnymi bazami danych, implementacjami JSF i JPA. Sugeruję zmienić swoje podejście do mapowania logicznych jako ciągi w 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, 
); 

a mapowania okazałoby się:

@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; 
    } 
    ... 
} 

zapełnić swój rekord z jednego wiersza: „” admin „;” admin „«T»,«T»; 1;” 12345678" następnie w JSF ty powinien mieć inny wynik:

<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'}"/> 
Powiązane problemy