получение логических свойств от объектов в JSP El - PullRequest
9 голосов
/ 06 февраля 2009

У меня есть экземпляр следующего объекта в контексте страницы jsp:

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

Как я могу запросить свойство isAdmin из EL? Это не похоже на работу:

${user.admin}

и это не:

${user.isAdmin}

спасибо!

-Morgan

Ответы [ 5 ]

4 голосов
/ 06 февраля 2009

Хорошо. Я тупой. Проголосуйте за этот вопрос, высмеивайте меня и т. Д. Проблема была в методе, которому делегировал 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)
0 голосов
/ 21 января 2011

Вот как Intellij (и я) сделали бы это:

private boolean isAdmin;

public boolean isAdmin() {
    return isAdmin;
}

public void setAdmin(boolean admin) {
    isAdmin = admin;
}
0 голосов
/ 06 февраля 2009

Во-первых, вам, вероятно, нужен геттер для класса User. Если это не поможет, {user.admin} должен сработать, поэтому я проверю, правильно ли вы ссылаетесь на bean-компонент в JSP.

Надеюсь, это поможет.

0 голосов
/ 06 февраля 2009

простой.

для меня, просто изменение isStuff на getStuff работало всегда.

конечно, это может быть против какого-то соглашения об именах, декларации независимости, прав человека и т. Д., Но это работает для меня.

0 голосов
/ 06 февраля 2009

Попробуйте это:

${user.Admin}

на всякий случай, если проблема в заглавных буквах. Иногда EL делает неочевидные вещи. Тем не менее, я обычно мог использовать эквивалент ${user.admin} в моем эл. Глядя на мой собственный код, у меня есть много примеров того, как это работает.

У вас есть следующие методы в вашем классе:

  public boolean isAdmin(){return isAdmin}

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

или у тебя только добытчик? Если мой код, я замечаю, что я не делаю выше. Все мои сеттеры начинаются с set, например:

  public boolean isAdmin(){return isAdmin}

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

и я могу использовать очевидное строчное решение ${user.admin} в моих JSP. Это может зависеть от того, какой процессор EL вы используете.

ПРИМЕЧАНИЕ: Добавлено позже, потому что люди все еще голосуют против, очевидно, никогда не сталкиваясь с примером, где это происходит. Пример из моих собственных JSP, который заставил меня задать этот вопрос, заключается в том, что у меня есть метод:

public int getLANSomething() { ... }

и я получаю доступ к этому в EL следующим образом: ${agent.LANSomething} Правило выглядит как getXXXyyy, где XXX - все заглавные буквы, вы должны использовать заглавные буквы для доступа к нему в EL. По крайней мере, с версиями Tomcat 4-6, которые я использовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...