2009-02-05 50 views
9

我在JSP頁面上下文以下對象的實例:獲得布爾屬性從對象JSP EL

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

我怎樣才能查詢從EL的isAdmin財產?這似乎並不工作:

${user.admin} 

也沒有這樣的:

${user.isAdmin} 

的感謝!

-Morgan

回答

4

好的。我真笨。投下這個問題,嘲笑我等等。問題出在Admin()委託給的方法中。該方法中存在空指針異常。然而,在我的辯護中,我會說我得到的堆棧跟蹤有點不清楚,並且看起來像是EL問題,而不是我的代碼中的簡單空指針。

醋,你的保證,即使沒有財產的Admin()也能幫助我解決這個問題。感謝那。

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

試試這個:

${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) { ... } 

,我能夠使用明顯小寫解決${user.admin}在我的JSP。這可能取決於您使用的EL處理器。

注意:後來增加,因爲人們仍然投票,顯然從來沒有遇到過這種情況的例子。從我自己的JSP造成我問這個問題的一個例子是,我有一個方法:

public int getLANSomething() { ... } 

,我訪問這個在EL如下:${agent.LANSomething}規則似乎是getXXXyyy其中XXX全爲大寫,你必須在EL中使用大寫字母來訪問它。至少在我用過的Tomcat版本4-6中。

+0

都能跟得上。謝謝你的想法。 – morgancodes 2009-02-05 23:17:52

+0

看看我最近的編輯。 – Eddie 2009-02-05 23:21:10

+1

$ {user.Admin}在這裏根本沒有意義。 – 2009-02-06 03:12:57

0

首先,您可能需要用戶類的getter。如果這沒有幫助,{user.admin}應該可以工作,所以我會檢查你的JSP中是否正確引用了bean。

希望有所幫助。

0

簡單。

對我來說,只是改變isStuff讓getStuff一直工作。

當然,這可能與某些命名慣例,獨立聲明,人權等有關。但它爲我工作。

0

這裏的IntelliJ(和我)會怎麼做:

private boolean isAdmin; 

public boolean isAdmin() { 
    return isAdmin; 
} 

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