2016-03-03 23 views
0

我在我的servlet中有一个Java对象User,我在JSP中将它分配给请求参数“user”。对象上的EL调用布尔方法

此用户有一个布尔方法hasConfidentialAccess(),它返回true或false。我想打电话给这在我的jsp如下所示:

<c:if test="${user.hasConfidentialAccess}"> 
... 
</c:if> 

但是,这并不工作,我的控制台抛出异常如下:

11:34:49978 ERROR [org.apache。 catalina.core.ContainerBase。[jboss.web]。[default-host]。[/ watson]。[BasicSearchControllerServlet]] (http- /.0.0.0:8080-7)JBWEB000236:servlet的Servlet.service() BasicSearchControllerServlet引发异常: javax.el.PropertyNotFoundException:类 'com.commons.framework.security.DefaultUser'会执行n没有 属性hasConfidentialAccess。

如何使这项工作?

+1

只需将其称为方法...''{user.hasConfidentialAccess()}'(getter的名称不符合bean内省规则)。当然,这要求你至少在servlet 2.5。 –

+0

纠错:Servlet 3.0。然而,这种方法令人沮丧,因为它基本上是滥用。 – BalusC

+0

的确,忘了括号。该死,谢谢 – Jonas

回答

1

EL确实支持直接访问isX()方法,就像访问getX()方法一样,但仅当isX()方法的返回类型是基本布尔值时才支持。

如果返回任何类型的对象(如布尔isObjectBooleanTrue()),那么EL未能找到方法,并会给你一个相当恶劣的EL例外: javax.el.PropertyNotFoundException:类“com.User ' 没有'isConfidentialAccess'属性。

所以,'is'方法在EL工作,但确保你只能从他们返回原始布尔值。

具体到你的问题:

  1. 变化hasConfidentialAccess()来isConfidentialAccess(),如Java bean的标准只以下是布尔返回类型。
  2. 将返回类型更改为布尔原语(如果当前您拥有布尔值),否则就会罚款。
相关问题