我正在使用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>
但是上述方法都没有奏效,方法根本就没有调用。有人能告诉我正确的语法吗?
答案 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