2009-02-05 14 views
9

ho un'istanza seguente oggetto nel contesto pagina JSP:ottenere le proprietà booleane da oggetti in jsp el

Class User{ 
    private boolean isAdmin; 
    public boolean isAdmin(){return isAdmin} 
} 

Come posso interrogare la proprietà IsAdmin dal EL? Questo non sembra funzionare:

${user.admin} 

Né questo:

${user.isAdmin} 

grazie!

-Morgan

risposta

4

Ok. Io sono stupido. Vota questa domanda, ridicolizzami, ecc. Il problema era nel metodo a cui è stato delegato Admin(). C'era un'eccezione di puntatore nullo in quel metodo. A mia difesa, tuttavia, dirò che la traccia dello stack che ho ottenuto era un po 'oscura, e ha fatto sembrare che fosse un problema EL piuttosto che un semplice puntatore nullo nel mio codice.

Aceto, le vostre assicurazioni che èAdmin() funziona anche senza una proprietà mi ha aiutato a capirlo. Grazie per quello.

javax.el.ELException: java.lang.NullPointerException 
     at javax.el.BeanELResolver.getValue(BeanELResolver.java:298) 
     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175) 
     at com.sun.el.parser.AstValue.getValue(AstValue.java:138) 
     at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206) 
     at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:1001) 
     at org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp._jspx_meth_c_forEach_1(org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp:452) 
     at org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp._jspx_meth_c_forEach_0(org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp:399) 
     at org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp._jspx_meth_form_form_0(org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp:348) 
     at org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp._jspService(org.apache.jsp.WEB_002dINF.jsp.managepermissions_jsp:197) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) 
     at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:334) 
     at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) 
     at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:240) 
     at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:252) 
     at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1173) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:901) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:523) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:463) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
+0

Sono contento che abbia funzionato :) –

+1

Sono sorpreso che * nessuno * di noi abbia chiesto il tuo messaggio di errore, che ci avrebbe detto di guardare il tuo codice e cercare un dump dello stack. – Eddie

+0

È divertente ma ho anche avuto un problema nel metodo dell'oggetto e ho pensato che fosse jsp/booleano correlato ... –

0

Prova questa:

${user.Admin} 

nel caso in cui la capitalizzazione è il problema. A volte EL fa cose non ovvie. Tuttavia, di solito sono stato in grado di usare solo l'equivalente di ${user.admin} nel mio el. Guardando il mio codice, ho molti esempi di fare la cosa ovvia dove funziona.

Avete i seguenti metodi nella classe:

public boolean isAdmin(){return isAdmin} 

    public void isAdmin(boolean newValue) { ... } 

o avete solo il getter? Se il mio codice, noto che non faccio quanto sopra. Il mio setter tutti iniziano con set quali:

public boolean isAdmin(){return isAdmin} 

    public void setAdmin(boolean newValue) { ... } 

e sono in grado di utilizzare la soluzione ovvia minuscolo ${user.admin} nei miei JSP. Questo può dipendere dal processore EL che stai usando.

NOTA: Aggiunto in seguito perché la gente continua a votare, ovviamente non ha mai imbattuto in un esempio in cui ciò si verifica. Un esempio dalla mia JSP che mi ha fatto questa domanda è che ho un metodo:

public int getLANSomething() { ... } 

e ho accedere a questo in EL come segue: ${agent.LANSomething} La regola sembra essere getXXXyyy dove XXX è tutto in maiuscolo, è devi usare i tappi per accedervi in ​​EL. Almeno con le versioni di Tomcat 4-6 che ho usato.

+0

no. grazie comunque per l'idea. – morgancodes

+0

Controlla la mia recente modifica. – Eddie

+1

$ {user.Admin} non ha assolutamente senso qui. –

0

In primo luogo, è probabilmente necessario un getter per la classe User. Se ciò non aiuta, {user.admin} dovrebbe funzionare, quindi dovrei verificare di avere il bean correttamente referenziato nel tuo JSP.

Spero che questo aiuti.

+1

C'è già un regalo getter. –

0

semplice.

per me, cambiando isStuff per ottenereStuff sempre funzionante.

ovviamente, che potrebbe essere contro qualche convenzione di denominazione, dichiarazione di indipendenza, diritti umani, ecc. Ma funziona per me.

+0

Ma dovrebbe funzionare con isXxxx(). E sta lavorando qui con me. –

+0

Penso che dipenda dalla versione di JSP su cui stai lavorando. Le versioni precedenti potrebbero aver bisogno di getIsXxxx() mentre le versioni più recenti supportano isXxxx(). –

+1

Un aggiornamento al mio commento isXxxx() funziona se il tipo restituito è booleano, ma non sembra funzionare se il tipo restituito è booleano. –

0

Ecco come Intellij (e io) sarebbe farlo:

private boolean isAdmin; 

public boolean isAdmin() { 
    return isAdmin; 
} 

public void setAdmin(boolean admin) { 
    isAdmin = admin; 
} 
Problemi correlati