【问题标题】:EL call boolean method on object [duplicate]EL在对象上调用布尔方法[重复]
【发布时间】:2016-06-16 15:29:14
【问题描述】:

我的 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.service() 用于 servlet BasicSearchControllerServlet 抛出异常: javax.el.PropertyNotFoundException:类 'com.commons.framework.security.DefaultUser' 没有 属性“hasConfidentialAccess”。

如何做到这一点?

【问题讨论】:

  • 只需将其称为方法...${user.hasConfidentialAccess()}(getter 的名称不符合 bean 自省规则)。当然,这要求您至少是 servlet 2.5。
  • 更正:Servlet 3.0。然而,这种方法并不鼓励,因为它基本上是滥用。
  • 确实,忘记括号了。该死,谢谢

标签: jsp boolean el propertynotfoundexception


【解决方案1】:

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

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

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

针对您的问题:

  1. 将 hasConfidentialAccess() 更改为 isConfidentialAccess(),因为 Java bean 标准仅遵循布尔返回类型。
  2. 将返回类型更改为布尔基元(如果您当前有布尔值),否则没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多