2009-02-05 18 views
9

tengo una instancia del objeto siguiente en el contexto de la página JSP:conseguir propiedades booleanas de los objetos en el JSP

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

¿Cómo puedo consultar la propiedad isAdmin del EL? Esto no parece funcionar:

${user.admin} 

Tampoco esto:

${user.isAdmin} 

gracias!

-Morgan

Respuesta

4

Ok. Soy estúpido. Vota esta pregunta, ridiculízame, etc. El problema estaba en el método al que estaba delegando Admin(). Hubo una excepción de puntero nulo en ese método. En mi defensa, sin embargo, diré que el seguimiento de la pila que recibí no estaba claro, y lo hizo parecer como si fuera un problema de EL más que un simple puntero nulo en mi código.

Vinagre, sus garantías de que esAdmin() funciona incluso sin una propiedad me ayudó a resolver esto. Gracias por eso.

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

Me alegra que funcionó :) –

+1

Me sorprende que * ninguno * de nosotros nos haya preguntado por su mensaje de error, lo que nos hubiera obligado a mirar su código y buscar un volcado de pila. – Eddie

+0

Es gracioso pero también tuve un problema en el método de objeto y pensé que era jsp/boolean relacionado ... –

0

Prueba esto:

${user.Admin} 

sólo en caso de capitalización es el problema. Algunas veces EL hace cosas no obvias. Sin embargo, por lo general solo he podido usar el equivalente de ${user.admin} en mi el. Al mirar mi propio código, tengo muchos ejemplos de hacer lo obvio en el lugar donde funciona.

¿Tiene los métodos siguientes en su clase:

public boolean isAdmin(){return isAdmin} 

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

o tiene sólo el comprador? Si mi código, me doy cuenta de que no hago lo anterior. Todos mis organismos comienzan con set tales como:

public boolean isAdmin(){return isAdmin} 

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

y soy capaz de utilizar la solución obvia minúsculas ${user.admin} en mis páginas JSP. Esto puede depender del procesador EL que estés usando.

NOTA: Se agregó más tarde porque la gente sigue votando esto, obviamente nunca se encontró con un ejemplo en el que esto ocurre. Un ejemplo de mi propia JSP que me hicieron esta pregunta es que tengo un método:

public int getLANSomething() { ... } 

y acceder a este en EL de la siguiente manera: ${agent.LANSomething} La regla parece ser getXXXyyy donde XXX es todo en mayúsculas, se tiene que usar gorras para acceder a él en EL. Al menos con Tomcat versiones 4-6 que he usado.

+0

pues no. gracias por la idea sin embargo. – morgancodes

+0

Mira mi edición reciente. – Eddie

+1

$ {user.Admin} no tiene sentido aquí, en absoluto. –

0

En primer lugar, es probable que necesite un getter para la clase de usuario. Si eso no ayuda, {user.admin} debería funcionar, por lo que verificaría que tenga el bean correctamente referenciado en su JSP.

Espero que ayude.

+1

Hay un obsequio presente, ya. –

0

simple.

para mí, solo estoy cambiando isStuff to getStuff funcionó siempre.

por supuesto, eso puede estar en contra de alguna convención de nombres, declaración de independencia, derechos humanos, etc. pero funciona para mí.

+0

Pero debería funcionar con isXxxx(). Y está trabajando aquí conmigo. –

+0

Creo que depende de la versión de JSP contra la que se esté ejecutando. Es posible que las versiones anteriores necesiten getIsXxxx(), mientras que las versiones más nuevas admiten isXxxx(). –

+1

Una actualización de mi comentario esXxxx() funciona si el tipo de devolución es booleano, pero no parece funcionar si el tipo de devolución es booleano. –

0

Así es como IntelliJ (y yo) lo harían:

private boolean isAdmin; 

public boolean isAdmin() { 
    return isAdmin; 
} 

public void setAdmin(boolean admin) { 
    isAdmin = admin; 
} 
Cuestiones relacionadas