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

JSF i generisanje drop-down menija

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

[ Pregleda: 462 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon JSF i generisanje drop-down menija22.05.2008. u 20:40

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?
Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
22.05.2008. u 20:40 

zigizig
Aleksandar
Beograd

Član broj: 42968
Poruke: 90
82.117.206.*



Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 08:46
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>
23.05.2008. u 08:46 

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 12:09
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).
Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
23.05.2008. u 12:09 

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 20:39
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?
Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
23.05.2008. u 20:39 

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 20:40
Ako umesto drop-down liste stavim text-box sve radi super.
Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
23.05.2008. u 20:40 

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon Re: JSF i generisanje drop-down menija23.05.2008. u 23:45
Greška je bila u tome što sam stavio da SelectItem value bude tipa String, a marka je tipa int.
Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
23.05.2008. u 23:45 

zigizig
Aleksandar
Beograd

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



Profil

icon Re: JSF i generisanje drop-down menija24.05.2008. u 20:39
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
24.05.2008. u 20:39 

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 01:20
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

Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
25.05.2008. u 01:20 

zigizig
Aleksandar
Beograd

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



Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 08:05
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).
25.05.2008. u 08:05 

Marko_R
Marko Ranđelović
Niš

Član broj: 3737
Poruke: 511
*.dynamic.sbb.rs.

Jabber: marel@elitesecurity.org
Sajt: www.linkedin.com/in/marko..


Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 09:04
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).

Na drugim forumima:: Ubuntu: Dzungla, Linuxo: Marel

Folding@Home - Team 513
25.05.2008. u 09:04 

zigizig
Aleksandar
Beograd

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



Profil

icon Re: JSF i generisanje drop-down menija25.05.2008. u 23:30
Tako je ;)
25.05.2008. u 23:30 

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

[ Pregleda: 462 | Odgovora: 10 ]

Postavi temu Odgovori

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