是否可以在JSP中访问后端方法?

时间:2014-03-31 18:21:42

标签: java java-ee syntax struts2 java-ee-6

我正在使用Struts2来构建一个Web应用程序,我在我的BaseAction类中有一个后端方法,每个其他Action类都扩展它,如下所示:

public boolean isUserFullyLogged() {
    final Boolean isLogado = (Boolean) this.retrieveSessionAttribute(Constantes.LOGADO);
    return (isLogado != null) && isLogado.booleanValue();
}

我希望在我的一个JSP中使用它来显示或不显示某些内容,我尝试了三种不同的方式,如下所示:

  • <s:if test="#userFullyLogged">Content</s:if>
  • <s:if test="%{#userFullyLogged}">Content</s:if>
  • <s:if test="userFullyLogged">Content</s:if>

但是上述方法都没有奏效,方法根本就没有调用。有人能告诉我正确的语法吗?

4 个答案:

答案 0 :(得分:3)

无需更改方法名称:

<s:if test="isUserFullyLogged()">Content</s:if>

请注意,如果您需要阻止整个页面而不是单个功能,则应在Interceptor中执行此类检查,方法是将包含自定义LoginInterceptor的拦截器堆栈应用于所有需要的操作仅由经过身份验证的用户打开。

答案 1 :(得分:1)

以下表格更可取:

<s:if test="userFullyLogged">Content</s:if>

参见Struts2 if documentation:test属性是一个表达式。 Struts将通过调用您的操作类getter来解析表达式属性,假设您的getter是根据JavaBean规范命名的(在您的示例中就是这种情况)。

答案 2 :(得分:0)

尝试将该名称更改为getUserFullyLogged并使用

<s:if test="userFullyLogged">Content</s:if>

实际上是调用方法

<s:if test="getUserFullyLogged()">Content</s:if>

答案 3 :(得分:-1)

只需使用

<s:if test="isUserFullyLogged()"></s:if> or `<s:if test="isUserFullyLogged"></s:if>`

调用该方法,否则你必须使用正确的getter-setter将此布尔结果的值设置为变量并使用<s:if test="%{#userFullyLogged}"></s:if>

谢谢, Amit Kumar Morea