EL 在对象上调用布尔方法

EL call boolean method on object

我的 servlet 中有一个 Java 对象 User,我将其分配给 JSP 中的请求参数 "user"。

此用户有一个布尔方法 hasConfidentialAccess(),returns true 或 false。我想在我的 jsp 中调用它,如下所示:

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

但这不起作用,我的控制台抛出以下异常:

11:34:49,978 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/watson].[BasicSearchControllerServlet]] (http-/0.0.0.0:8080-7) JBWEB000236: Servlet.service() for servlet BasicSearchControllerServlet threw exception: javax.el.PropertyNotFoundException: The class 'com.commons.framework.security.DefaultUser' does not have the property 'hasConfidentialAccess'.

如何进行这项工作?

EL 确实支持像访问 getX() 方法一样直接访问 isX() 方法,但前提是 isX() 方法的 return 类型是原始布尔值。

如果您 return 任何类型的对象(例如 Boolean isObjectBooleanTrue()),则 EL 无法找到该方法并将给您一个相当讨厌的 EL 异常: javax.el.PropertyNotFoundException:class 'com.User' 确实 没有 属性 'isConfidentialAccess'.

所以是的,'is' 方法在 EL 中有效,但请确保您仅 return 来自它们的原始布尔值。

具体到你的问题:

  1. 将 hasConfidentialAccess() 更改为 isConfidentialAccess(),因为 java bean 标准仅适用于布尔 return 类型。
  2. 将 return 类型更改为基本布尔值(如果当前您有布尔值),否则没问题。