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

JSF i generisanje drop-down menija

[es] :: Java :: JSF i generisanje drop-down menija

[ Pregleda: 2458 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon JSF i generisanje drop-down menija22.05.2008. u 20:40 - pre 193 meseci
Pokušavam da napravim neku prostu JSF aplikaciju, dakle da se izabere neka stavka iz spiska. Spisak stavki se čita iz baze podataka i treba da se na osnovu toga generiše drop-down meni pomoću kog se vrši izbor. Naravno, pretpostavljam da to mora da bude <h:selectOneMenu> tag. Ali ima mnogo opcija, a i njihov broj je nepoznat, tako da to mora da bude neka struktura podataka koju treba proći nekom petljom. Ja sam probao <c:forEach> ali to nije radilo jer nisam uspeo da iz njega pristupim vrednostima managed bean-a. Dakle

Code:
<h:selectOneMenu value="#{artBean.marka}">
    <c:forEach var="row" items="${artBean.proizvodjaci}">
        <f:selectItem itemLabel="${row.getValue()}" itemValue="${row.getKey()}" />
    </c:forEach>
</h:selectOneMenu>


Takođe, nisam uspeo ni da iz bean-a setujem EL varijablu koja može da se iskoristi u JSTL tagovima. Pokušao sam sa

Code:
FacesContext context = FacesContext.getCurrentInstance();
servletContext servletContext = (ServletContext) context.getExternalContext().getContext();
if (servletContext.getAttribute("proizvodjaci") != null)
    servletContext.removeAttribute("proizvodjaci");
servletContext.setAttribute("proizvodjaci",proizvodjaci);


ali u meniju se pojavi doslovce ${row.getValue()} a ne vrednost tog izraza.

Ako iskoristim JspContext, javlja se Exception.

Code:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: #{artBean.submitId}: javax.faces.el.EvaluationException: java.lang.ClassCastException: org.apache.catalina.core.ApplicationContextFacade
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

root cause

javax.faces.FacesException: #{artBean.submitId}: javax.faces.el.EvaluationException: java.lang.ClassCastException: org.apache.catalina.core.ApplicationContextFacade
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
    javax.faces.component.UICommand.broadcast(UICommand.java:312)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
Apache Tomcat/5.5


Da li bi mogla mala pomoć oko ovoga?
 
Odgovor na temu

zigizig

Član broj: 42968
Poruke: 167
82.117.206.*



+10 Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 08:46 - pre 193 meseci
U bean-u kreiraj SelectItem[] listu

public SelectItem[] getListaProizvodjaca() {
...upit na bazu ili sta vec...
SelectItem [] select = new SelectItem[broj_rezultata_iz_baze];
for (int i = 0; i < broj_rezultata_iz_baze; ++i) {
select = new SelectItem(rezultat[ i].id, rezultat[ i].naziv);
}
return select;
}



U jsp strani napravi selectOneMenu

<h:selectOneMenu id="marka" value="#{artBean.marka}" required="true">
<f:selectItems id="listaProizvodjaca" value="#{artBean.listaProizvodjaca}"/>
</h:selectOneMenu>
 
Odgovor na temu

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 12:09 - pre 193 meseci
Prvo, hvala na odgovoru. Način je delovao vrlo logično i nadao sam se uspehu. Ipak, došlo je do problema.

Uradio sam otprilike ovako:

u bean-u:

Code:

    private SelectItem [] proizvodjaci;
    
    ...

    public String submitId() {
        readProizvodjaci();
        ...
    }
    
    ...

    public SelectItem [] getProizvodjaci() {
        return proizvodjaci;
    }

    public void readProizvodjaci() {
        //Generiše proizvodjači iz baze podataka
        String query = "select id,naziv from proizvodjac";
        ...Izvršava se query i smešta rezultat u ResultSet rs...
        rs.last();
        proizvodjaci = new SelectItem [rs.getRow()];
        rs.beforeFirst();
        int i = 0;
        while (rs.next()) {
            proizvodjaci[i++] = new SelectItem(Integer.toString(rs.getInt(1)),rs.getString(2));
        }
        ...
    }


u jsp-u:

Code:

<h:selectOneMenu value="#{artBean.marka}">
    <f:selectItems id="proizvodjaci" value="#{artBean.proizvodjaci}" />
</h:selectOneMenu>


Proverio sam da je dužina niza proizvodjači 83, koliko i treba da bude.

Ali dobijam ovaj Excepition:

Code:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.jsp.JspException: Argument Error: One or more parameters are null.
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Argument Error: One or more parameters are null.
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:839)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
    org.apache.jsp.update_jsp._jspService(update_jsp.java:83)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

root cause

java.lang.NullPointerException: Argument Error: One or more parameters are null.
    com.sun.faces.renderkit.html_basic.HtmlResponseWriter.writeText(HtmlResponseWriter.java:357)
    com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:581)
    com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:525)
    com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:481)
    com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:430)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:720)
    javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:623)
    javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:546)
    com.sun.faces.taglib.html_basic.SelectOneMenuTag.doEndTag(SelectOneMenuTag.java:505)
    org.apache.jsp.update_jsp._jspx_meth_h_selectOneMenu_0(update_jsp.java:219)
    org.apache.jsp.update_jsp._jspx_meth_h_form_0(update_jsp.java:153)
    org.apache.jsp.update_jsp._jspx_meth_f_view_0(update_jsp.java:115)
    org.apache.jsp.update_jsp._jspService(update_jsp.java:76)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
Apache Tomcat/5.5


Šta sad to može da bude? Proverio sam sve više puta, probao razne kombinacije, ali uvek isto. Jedino nisam probao drugi tip podataka za proizvodjaci (npr. List ili Map).
 
Odgovor na temu

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 20:39 - pre 193 meseci
Rešio sam ovaj problem, razlog je bio u tome što je jedno polje u bazi podataka bilo null. Ali i dalje ne radi kako treba, jer nije selektovana odgovarajuća opcija, već prva, a kada kliknem na submit da se upišu izmenjeni podaci, ne prebaci me na sledeću stranu, već se učita ta ista, a podaci ostanu nepromenjeni. Ima li nekih sugestija?
 
Odgovor na temu

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 20:40 - pre 193 meseci
Ako umesto drop-down liste stavim text-box sve radi super.
 
Odgovor na temu

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 23:45 - pre 193 meseci
Greška je bila u tome što sam stavio da SelectItem value bude tipa String, a marka je tipa int.
 
Odgovor na temu

zigizig

Član broj: 42968
Poruke: 167
*.ptt.yu.



+10 Profil

icon Re: JSF i generisanje drop-down menija24.05.2008. u 20:39 - pre 193 meseci
neka ti value bude long jer id moze da bude povelik :)

Jel to sad radi kako treba?

Jos nesto:
Nema potreba da pravis i promenljivu proizvodjaci.
Neka ti metoda
Code:
public void readProizvodjaci()
vraca SelectItem[]
Code:
public SelectItem[] readProizvodjaci()
pa u njoj kreiraj
Code:
SelectItem[] proizvodjaci = new SelectItem [rs.getRow()]

pa na kraju
Code:
return proizvodjaci
 
Odgovor na temu

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 01:20 - pre 193 meseci
Citat:
zigizig: neka ti value bude long jer id moze da bude povelik :)

Jel to sad radi kako treba?

Radi kako treba, a int je sasvim dovoljan jer ide do dve milijarde.

Citat:
Jos nesto:
Nema potreba da pravis i promenljivu proizvodjaci.
Neka ti metoda
Code:
public void readProizvodjaci()
vraca SelectItem[]
Code:
public SelectItem[] readProizvodjaci()
pa u njoj kreiraj
Code:
SelectItem[] proizvodjaci = new SelectItem [rs.getRow()]

pa na kraju
Code:
return proizvodjaci

Hvala na korisnoj sugestiji, sad niz ne mora da bude non-stop u memoriji. Samo izgleda da mora da se taj metod zove getProizvodjaci, inače dolazi do izuzetka.

Code:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.jsp.JspException: Error getting property 'readProizvodjaci' from bean of type tjsf1.Artikal
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Error getting property 'readProizvodjaci' from bean of type tjsf1.Artikal
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:839)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
    org.apache.jsp.update_jsp._jspService(update_jsp.java:83)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

root cause

javax.faces.el.PropertyNotFoundException: Error getting property 'readProizvodjaci' from bean of type tjsf1.Artikal
    com.sun.faces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:107)
    com.sun.faces.el.impl.ArraySuffix.evaluate(ArraySuffix.java:167)
    com.sun.faces.el.impl.ComplexValue.evaluate(ComplexValue.java:151)
    com.sun.faces.el.impl.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:243)
    com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:173)
    com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:154)
    javax.faces.component.UISelectItems.getValue(UISelectItems.java:110)
    com.sun.faces.util.Util.getSelectItems(Util.java:600)
    com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:488)
    com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:465)
    com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:430)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:720)
    javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:623)
    javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:546)
    com.sun.faces.taglib.html_basic.SelectOneMenuTag.doEndTag(SelectOneMenuTag.java:505)
    org.apache.jsp.update_jsp._jspx_meth_h_selectOneMenu_0(update_jsp.java:227)
    org.apache.jsp.update_jsp._jspx_meth_h_form_0(update_jsp.java:154)
    org.apache.jsp.update_jsp._jspx_meth_f_view_0(update_jsp.java:116)
    org.apache.jsp.update_jsp._jspService(update_jsp.java:76)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
Apache Tomcat/5.5
 
Odgovor na temu

zigizig

Član broj: 42968
Poruke: 167
*.ptt.yu.



+10 Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 08:05 - pre 193 meseci
Da u pravu si, to sam prevideo.
Da bi metoda mogla da se pozove iz jsf taga mora da ima prefiks get. Inace i kad mapiras promenljive u stvari se poziva get metoda (ili is za boolean).

Ako se dobro secam jedini izuzetak je ako metoda vraca String (ovo proveri jer nisam siguran).
 
Odgovor na temu

Marko_R
Marko Ranđelović
Programer
Niš

Član broj: 3737
Poruke: 575



+4 Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 09:04 - pre 193 meseci
Dakle, ono što je izgleda jedino moguće je da se metod nazove getProizvodjaci, a iz jsp-a da se referencira sa proizvodjaci (ne getProizvdjaci).
 
Odgovor na temu

zigizig

Član broj: 42968
Poruke: 167
*.ptt.yu.



+10 Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 23:30 - pre 193 meseci
Tako je ;)
 
Odgovor na temu

[es] :: Java :: JSF i generisanje drop-down menija

[ Pregleda: 2458 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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