对象上的EL调用布尔方法
我在我的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。
如何使这项工作?
EL确实支持直接访问isX()方法,就像访问getX()方法一样,但仅当isX()方法的返回类型是基本布尔值时才支持。
如果返回任何类型的对象(如布尔isObjectBooleanTrue()),那么EL未能找到方法,并会给你一个相当恶劣的EL例外: javax.el.PropertyNotFoundException:类“com.User ' 没有'isConfidentialAccess'属性。
所以是,'is'方法在EL工作,但确保你只能从他们返回原始布尔值。
具体到你的问题:
- 变化hasConfidentialAccess()来isConfidentialAccess(),如Java bean的标准只以下是布尔返回类型。
- 将返回类型更改为布尔原语(如果当前您拥有布尔值),否则就会罚款。
只需将其称为方法...''{user.hasConfidentialAccess()}'(getter的名称不符合bean内省规则)。当然,这要求你至少在servlet 2.5。 –
纠错:Servlet 3.0。然而,这种方法令人沮丧,因为它基本上是滥用。 – BalusC
的确,忘了括号。该死,谢谢 – Jonas