1

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

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

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

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

11:34:49,978 错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/watson].[BasicSearchControllerServlet]] (http-/0.0.0.0:8080-7) JBWEB000236:Servlet BasicSearchControllerServlet 的 Servlet.service() 引发异常:javax.el.PropertyNotFoundException:类“com.commons.framework.security.DefaultUser”没有属性“hasConfidentialAccess”。

如何使这项工作?

4

1 回答 1

4

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

如果您返回任何类型的对象(例如 Boolean isObjectBooleanTrue()),则 EL 无法找到该方法并会给您一个相当讨厌的 EL 异常:javax.el.PropertyNotFoundException: The class 'com.User' does not have the属性“isConfidentialAccess”。

所以的,'is' 方法在 EL 中有效,但请确保您只从它们返回原始布尔值。

具体到您的问题:

  1. 将 hasConfidentialAccess() 更改为 isConfidentialAccess(),因为 java bean 标准只遵循布尔返回类型。
  2. 将返回类型更改为布尔原语(如果当前您有布尔值),否则很好。
于 2016-03-03T10:59:19.353 回答