我在jsp页面上下文中有以下对象的实例:
Class User{
private boolean isAdmin;
public boolean isAdmin(){return isAdmin}
}
如何从EL查询isAdmin属性?这似乎不起作用:
${user.admin}
也不是这样:
${user.isAdmin}
谢谢!
-Morgan
答案 0 :(得分:4)
确定。我真笨。投下这个问题,嘲笑我等等。问题出在isAdmin()委托的方法中。该方法中存在空指针异常。然而,在我的辩护中,我会说我得到的堆栈跟踪有点不清楚,并且使它看起来像是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)
答案 1 :(得分:0)
试试这个:
${user.Admin}
以防大写是问题。有时EL会做非显而易见的事情。但是,我通常只能在我的el中使用等效的${user.admin}
。看看我自己的代码,我有很多例子可以说明它的工作原理。
您的课程中是否有以下方法:
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。
答案 2 :(得分:0)
首先,您可能需要User类的getter。如果这没有用,{user.admin}应该可以工作,所以我会检查你的JSP中是否正确引用了bean。
希望有所帮助。
答案 3 :(得分:0)
简单。
对我来说,只需将isStuff更改为getStuff就可以了。
当然,这可能违反了一些命名惯例,宣布独立,人权等等。但它对我有用。答案 4 :(得分:0)
以下是Intellij(和我)将如何做到这一点:
private boolean isAdmin;
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean admin) {
isAdmin = admin;
}