从jsp el中的对象获取布尔属性

时间:2009-02-05 22:51:54

标签: java jsp

我在jsp页面上下文中有以下对象的实例:

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

如何从EL查询isAdmin属性?这似乎不起作用:

${user.admin}

也不是这样:

${user.isAdmin}

谢谢!

-Morgan

5 个答案:

答案 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;
}