从jsp el中的对象获取布尔属性
我在jsp页面上下文中有以下对象的实例:
Class User{ private boolean isAdmin; public boolean isAdmin(){return isAdmin} }
如何从EL查询isAdmin属性? 这似乎不起作用:
${user.admin}
这也不是:
${user.isAdmin}
谢谢!
-摩根
好。 我真笨。 投下这个问题,嘲笑我等等。问题出在isAdmin()委托的方法中。 该方法中存在空指针exception。 然而,在我的辩护中,我会说我得到的堆栈跟踪有点不清楚,并使它看起来像是一个EL问题而不是我的代码中的简单空指针。
醋,你的保证isAdmin()即使没有财产也可以帮助我解决这个问题。 感谢那。
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)
首先,您可能需要User类的getter。 如果这没有用,{user.admin}应该可以工作,所以我会检查你的JSP中是否正确引用了bean。
希望有所帮助。
简单。
对我来说,只需将isStuff更改为getStuff即可。
当然,这可能违反了一些命名惯例,宣布独立,人权等等。但它对我有用。
以下是Intellij(和我)将如何做到这一点:
private boolean isAdmin; public boolean isAdmin() { return isAdmin; } public void setAdmin(boolean admin) { isAdmin = admin; }
尝试这个:
${user.Admin}
以防大写是问题所在。 有时EL会做非显而易见的事情。 但是,我通常只能在我的el中使用${user.admin}
。 看看我自己的代码,我有很多例子可以说明它的工作原理。
你class上有以下方法吗:
public boolean isAdmin(){return isAdmin} public void isAdmin(boolean newValue) { ... }
或者你只有吸气剂? 如果我的代码,我注意到我不做上述。 我的二传手都以set
开头,例如:
public boolean isAdmin(){return isAdmin} public void setAdmin(boolean newValue) { ... }
我能够在JSP中使用明显的小写解决方案${user.admin}
。 这可能取决于您使用的是哪个EL处理器。
注意:稍后添加,因为人们仍然对此进行投票,显然从未遇到过发生这种情况的示例。 我自己的JSP中的一个例子让我问这个问题是我有一个方法:
public int getLANSomething() { ... }
我在EL中访问它如下: ${agent.LANSomething}
规则似乎是getXXXyyy
,其中XXX
是全部大写,你必须使用大写来访问它在EL中。 至少我使用的Tomcat版本4-6。