Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

JSF problem- Problem sa konveziom u selectOneMenu

[es] :: Java :: JSF problem- Problem sa konveziom u selectOneMenu

[ Pregleda: 2037 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Belgarion
Novi Sad

Član broj: 245135
Poruke: 71
*.adsl-a-12.sezampro.rs.



+2 Profil

icon JSF problem- Problem sa konveziom u selectOneMenu18.02.2011. u 13:25 - pre 160 meseci
Trenutno učim JSF i imam problem koji ne mogu da rešim već 2 dana i jako bih cenio ako mi neko pomogne.

Imam <h:selectOneMenu u koji prikazuje imana profesora koja su se čitaju iz baze.
Takodje imam <h:commandButton koji bi trebalo da upiše u tabelu Poruka sledeće podatke:
- ime profesora koji sam odabrao u selectOneMenu
-takodje treba da upiše i tekt koju pišem u <h:inputTextarea ali ovaj deo radi kada uklonim selectOneMenu

Ipak posle sam odustao od toga u želji samo da konačno pozove metod posalji() makara samo da ispise: System.out.println("komentar");

JSF javlja grešku:
Code:

Conversion Error setting value 'dbmodel.Profesor@d8e902' for 'null Converter'. 

Očigledno problem sa konverzijom u <h:selectOneMenu jer ne može biti ništa drugo.
Ali taj problem sa konverzijom ne znam kako da rešim, sve što sam našao na netu je ili konfuzno ili previše prosto da primenim ovde.

Da li može neko da mi pojasni?
Hvala Unapred

Code:

               <h:form >
            <h:panelGrid columns="2">
                <h:outputText value="Kome"></h:outputText>

                    <h:selectOneMenu validatorMessage="required" value="#{slanje.kome}" >
                    <f:selectItems value="#{slanje.list}" /> 
                </h:selectOneMenu>

                <h:outputText value="Tekst poruke"></h:outputText>
                <h:inputTextarea value="#{slanje.tekst}" cols="40" rows="10"></h:inputTextarea>


            </h:panelGrid>
            <h:panelGroup>

                    <h:commandButton action="#{slanje.posalji}" value="Posalji" accesskey="s">
                </h:commandButton>

            </h:panelGroup>
        </h:form> 


Code:

package dbmodel;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.component.UIForm;
import javax.faces.model.SelectItem;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import de.vogella.eclipse.ide.first.HibernateUtil;

public class Slanje {
    private SelectItem kome;
    private List<SelectItem> list;
    //...

    public SelectItem getKome() {
        return kome;
    }
       public void setKome(SelectItem kome) {
        this.kome = kome;
    }

    public List getList() {
        list = new ArrayList<SelectItem>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = null;

        transaction = session.beginTransaction();
        String HQL_QUERY = "from Profesor";
        Query query = session.createQuery(HQL_QUERY);
        List result = query.list();

        for (Iterator it = result.iterator(); it.hasNext();) {
            Profesor prof = (Profesor) it.next();
            list.add(new SelectItem(prof, prof.getIme() + " "+ prof.getPrezime()));
        }

        return list;
    }

    public String posalji() {
        System.out.println("komentar");
        // Poruka p = new Poruka();
        // p.novaPoruka(tekst, (Profesor) kome.getValue());

        return "back";
    }

        
}


 
Odgovor na temu

Belgarion
Novi Sad

Član broj: 245135
Poruke: 71
*.adsl-a-12.sezampro.rs.



+2 Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu18.02.2011. u 18:38 - pre 160 meseci
REŠIO SAM!

Ovo je bio jedan od najdužih dana u mom životu,
i verovatno sam najviše puta dobio želju da razbijem monitor.

Kod mi je trenutno izbrljavljen, i jedva da ja mogu da ga pročitam,
ali čim ga sredim malo postaviću rešenje za one koji budu možda imali sličan problem.

U svakom slučaju JSF mi je uzeo mnogo više nerava nego što sam planirao,
i ne znam kako će biti kada se upustim u hvatanje dogadjaja,
i bilo bi super da mi preporučite neku normalnu literaturu.

Ili eventualno da mi barem odgovorite na neke nejasnoće.

Ako ovde uopšte ima ljudi raspoloženih za tako nešto ?

 
Odgovor na temu

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.static.kdsinter.net.



Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu19.02.2011. u 10:36 - pre 160 meseci
Citat:
Belgarion
U svakom slučaju JSF mi je uzeo mnogo više nerava nego što sam planirao,
i ne znam kako će biti kada se upustim u hvatanje dogadjaja,
i bilo bi super da mi preporučite neku normalnu literaturu.


Slobodno skini knjigu Jsf in action. Za ovo sto te je namucilo, pretpostavicu da ti je jsf bean request scope. Posto lista select itema cuva entitet profesor, treba ti tvoj konverter koji ce profesora pretvoriti u nekakav string. U faces.config mozes da registrujes konverter koji ce se pozvati svaki put kada u nekoj select listi imas profesore:

Code:

    <converter>
        <converter-for-class>nekipaket.Profesor</converter-for-class>
        <converter-class>nekidrugipaket.ProfesorConverter</converter-class>
    </converter>


Kad ga ovako uvedes, on ce se pozivati automatski, pa nema potrebe da uvodis konverter na samoj jsf stranici. ProfesorConverter klasa implementira javax.faces.convert.Converter. Kada ti se renderuje forma koja sadrzi tu select listu, izvrsice se getAsString() metod konvertera, za svaki select item iz tvoje liste. Kada u listi izaberes jednog profesora, izvrsice se getAsObject() iz konvertera.

E sad, ako je jsf bean request scope, metod getList() ce se izvrsiti i na pocetku prilikom renderovanja forme, a i svaki put kad izaberes nekog profesora iz liste. Znaci, da ti ne bi odlazio vise puta na bazu i povlacio listu profesora svaki put, mozes da ih upamtis u nekom drugom jsf beanu koji se session scope (ako koristis jsf 1.2, a ne 2.0), i iz njega citas listu profesora svaki put kada realno nema potrebe ponovo otici na bazu.
 
Odgovor na temu

Belgarion
Novi Sad

Član broj: 245135
Poruke: 71
*.adsl-a-12.sezampro.rs.



+2 Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu20.02.2011. u 12:07 - pre 160 meseci
Hvala na odgovoru, pogotovo ovo za request scope mi dosta pojašnjava.

Imam još jedan problem , verovatno još trivijalniji.
Nije mi jasno kako da ispišem polje nekog objekta.
Kada ispisujem neki int,String ili neki običan tip sve je ok,
ali problem nastaje kada to pokušam sa objektom.
(<h:outputText value="#{todo.profesor.ime}"></h:outputText>)
Evo kako:

Code:

public class Inbox {
    private HtmlDataTable dataTable;
    private List<Poruka> poruke;
    
    {
    izlistaj();    
    }

    public Inbox(){
        izlistaj();
    }
         // Set get metodi...
         //.......
    public void izlistaj() {
        // Čitam iz baze i smeštam u ==> List<Poruka> poruke;

    }

}




Poruka :
Code:

public class Poruka implements java.io.Serializable {

    private int idporuke;
    private Profesor profesor;
    private Student student;
    private Poruka poruka;
    private Boolean smerprofstud;
    private Boolean procitano;
    private String tekstporuke;
    private Date datumvreme;
    private String rad;
    private Set porukas = new HashSet(0);

       // konstruktori, set get metodi itd.
       //...
      //...


JSF:

Code:

<fieldset><legend>Primljene poruke</legend> <h:dataTable
            binding="#{inbox.dataTable}" value="#{inbox.poruke}" var="todo"
            styleClass="todo" headerClass="todoheader"
            columnClasses="first, rest">

                 <f:facet name="header">
                    <h:column>
                        <h:outputText value="Od"></h:outputText>
                    </h:column>
                </f:facet>

                               <%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Sledeci red je greska !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%>
                               <%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Zasto ????????????????????%>
                <h:outputText value="#{todo.profesor.ime}"></h:outputText>
            </h:column>
        </h:dataTable></fieldset>



javlja gresku

Code:

/inboxstud.jsp(62,4) '#{todo.profesor.ime}' Error reading 'ime' on type dbmodel.Profesor$$EnhancerByCGLIB$$f78e2307






 
Odgovor na temu

MMX
Miloš Malović
Platform engineer, Supplyframe
Beograd

SuperModerator
Član broj: 2423
Poruke: 2105
188.120.102.*

Jabber: mmx@elitesecurity.org
ICQ: 98797759
Sajt: www.mmx.rs


+11 Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu20.02.2011. u 15:54 - pre 160 meseci
Da li u klasi Profesor imaš getter za variablu ime? I da li je ta klasa napravljena po Java beans specifikaciji (defaultni konstruktor, getteri i setteri za sve instancne promenljive)?

Što se tiče problema iz prvog pitanja, ne vidim da si tamo igde koristio binding i backing bean? Ako već nisi radio pomoću backing beanova, onda si treba da dodeliš jedinstvene ID-jeve formi i poljima unutar forme, pa da njihove vrednosti uzimaš iz requesta.
↑ ↑ ↓ ↓ ← → ← → B A B A [select] [start]
 
Odgovor na temu

Belgarion
Novi Sad

Član broj: 245135
Poruke: 71
*.adsl-a-12.sezampro.rs.



+2 Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu20.02.2011. u 16:20 - pre 160 meseci
Profesor je hibernate bean i izgleda ovako:

Code:

public class Profesor implements java.io.Serializable {

    private int idprofesora;
    private String ime;
    private String prezime;
    private String email;
    private String lozinka;
    private String brojtelefona;
    private String zvanje;
    private Set porukas = new HashSet(0);
    private Set temas = new HashSet(0);


    boolean logProf;
    public String logovanProf;
    String lozProf;
    public static int id;
    public static Profesor P;
    public static String mail;

    public Profesor() {
    }

    public Profesor(int idprofesora, String ime, String prezime, String email) {
        this.idprofesora = idprofesora;
        this.ime = ime;
        this.prezime = prezime;
        this.email = email;
    }

    public Profesor(int idprofesora, String ime, String prezime, String email,
            String lozinka, String brojtelefona, String zvanje, Set porukas,
            Set temas) {
        this.idprofesora = idprofesora;
        this.ime = ime;
        this.prezime = prezime;
        this.email = email;
        this.lozinka = lozinka;
        this.brojtelefona = brojtelefona;
        this.zvanje = zvanje;
        this.porukas = porukas;
        this.temas = temas;
    }

    public int getIdprofesora() {
        return this.idprofesora;
    }

    public void setIdprofesora(int idprofesora) {
        this.idprofesora = idprofesora;
    }

    public String getIme() {
        return this.ime;
    }

    public void setIme(String ime) {
        this.ime = ime;
    }

    public String getPrezime() {
        return this.prezime;
    }

    public void setPrezime(String prezime) {
        this.prezime = prezime;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getLozinka() {
        return this.lozinka;
    }

    public void setLozinka(String lozinka) {
        this.lozinka = lozinka;
    }

    public String getBrojtelefona() {
        return this.brojtelefona;
    }

    public void setBrojtelefona(String brojtelefona) {
        this.brojtelefona = brojtelefona;
    }

    public String getZvanje() {
        return this.zvanje;
    }

    public void setZvanje(String zvanje) {
        this.zvanje = zvanje;
    }

    public Set getPorukas() {
        return this.porukas;
    }

    public void setPorukas(Set porukas) {
        this.porukas = porukas;
    }

    public Set getTemas() {
        return this.temas;
    }

    public void setTemas(Set temas) {
        this.temas = temas;
    }
   ///jos neki metodi...
}



inače mogući problem je greška u faces-config fajlu.
pošto nije mi bio definisan property ali sada sam ubacio <managed-property>
ali i dalje javlja istu grešku.
Code:

<managed-bean>
        <managed-bean-name>poruka</managed-bean-name>
        <managed-bean-class>dbmodel.Poruka</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>profesor</property-name>
            <property-class>dbmodel.Profesor</property-class>
            <value>#{profesor}</value>
        </managed-property>
    </managed-bean>




[Ovu poruku je menjao Belgarion dana 20.02.2011. u 21:20 GMT+1]
 
Odgovor na temu

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.static.kdsinter.net.



Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu21.02.2011. u 12:12 - pre 160 meseci
Citat:
Belgarion
Kada ispisujem neki int,String ili neki običan tip sve je ok,
ali problem nastaje kada to pokušam sa objektom.
(<h:outputText value="#{todo.profesor.ime}"></h:outputText>)

Code:

<fieldset><legend>Primljene poruke</legend> <h:dataTable
binding="#{inbox.dataTable}" value="#{inbox.poruke}" var="todo"
styleClass="todo" headerClass="todoheader"
columnClasses="first, rest">

         <f:facet name="header">
<h:column>
<h:outputText value="Od"></h:outputText>
</h:column>
</f:facet>

                               <%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Sledeci red je greska !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%>
                               <%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Zasto ????????????????????%>
<h:outputText value="#{todo.profesor.ime}"></h:outputText>
</h:column>
</h:dataTable></fieldset>


]


Koliko vidim, imas zatvoren </h:column> tag, ali nigde ga nisi otvorio. Nije mi jasno za sta ti sluzi binding u dataTable, tj. za sta ga tacno koristis u beanu. Da li si ona hibernate mapiranja uradio dobro (za klasu Profesor)? Da li je Inbox pravilno registrovan u faces-config kao bean? Probaj u Inbox klasi da stavis breakpoint na getPoruke() i da vidis sta u sebi sadrzi lista poruka posle odlaska na bazu. Da li dobijes poruku o greski samo u brauzeru, ili ti ispuca i izuzetak u konzoli? Bilo bi dobro da vidimo sta kaze ukoliko postoji.
 
Odgovor na temu

Belgarion
Novi Sad

Član broj: 245135
Poruke: 71
*.adsl-a-2.sezampro.rs.



+2 Profil

icon Re: JSF problem- Problem sa konveziom u selectOneMenu24.02.2011. u 18:49 - pre 160 meseci
Problem ipak bio u Hibernateu a ne u JSF-u.
Nešto u vezi sa Lazy loadingom, tako mi je barem profesor rekao.
Sada ću da čitam o tome pa da vidi šta je to i kako to da izbegnem.
 
Odgovor na temu

[es] :: Java :: JSF problem- Problem sa konveziom u selectOneMenu

[ Pregleda: 2037 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.