【问题标题】:<s:if> tag condition not working for session variables in Struts 2<s:if> 标记条件不适用于 Struts 2 中的会话变量
【发布时间】:2017-04-24 11:12:57
【问题描述】:

过去 2 天我遇到了一个特殊问题,但找不到原因。

我在 JSP 文件中有一个 &lt;s:if> 标记,用于检查给定的布尔变量是否为 true。如果是,我正在显示菜单。

我正在检查 4 个不同的变量,其中 3 个变量正在工作,除了 1。如果变量 superAdmin, admin and requester 中的任何一个是 true,则显示列表。但如果变量persontrue,则列表不显示。

我尝试使用&lt;s:hidden...&gt;在屏幕上打印变量的值,它打印的值是TRUE

变量设置为true并传递给UI。

不过,&lt;s:if&gt; 标记并未检查布尔变量 person,因此列表不会显示在屏幕上。

<s:if test="%{#session.userDetails.superAdmin || #session.userDetails.admin || #session.userDetails.person || #session.userDetails.requester}">
    <li><a href="../displays/MeasurementsByAdministrator.action" onclick="javascript:startCfaPB()">Member Measurements</a></li>
</s:if>

【问题讨论】:

  • 我想你一定是打错了
  • @ScaryWombat,你看到附加代码中的错字了吗?如果是由于拼写错误,我确实使用了这个词进行了搜索。完全一样。
  • @Anand 你有什么错误吗? if 条件不起作用 是什么意思?
  • @RomanC,我没有收到任何错误。我的意思是 IF 子句不适用于变量 person(具有布尔值 true)。
  • @Anand 查看下面的答案。

标签: java jsp struts2 ognl


【解决方案1】:

根据您的帖子,您说如果变量persontrue,则不应显示该列表,否则应在其false 时显示该列表。

因此,if 条件应该是 !#session.userDetails.person ,因此是 !

【讨论】:

  • 我说,如果 4 个变量中的任何一个为真,那么应该显示列表。在这种情况下,它适用于 3 个变量,但不适用于变量“人”。你误会了。要求是如果 4 个变量中的任何一个为真,那么“人”应该为真,然后应该显示列表。无论如何感谢您的评论。
【解决方案2】:

试试这个:

<s:if test="#session.userDetails.superAdmin || #session.userDetails.admin || #session.userDetails.person || #session.userDetails.requester">
    <li><a href="../displays/MeasurementsByAdministrator.action" onclick="javascript:startCfaPB()">Member Measurements</a></li>
</s:if>

【讨论】:

  • 这将评估为同样的事情。
【解决方案3】:

这是你应该检查的,如果它有效,那么你的变量的返回类型有问题。

<s:if test="%{#session.userDetails.person == true}">
    <li><a href="../displays/MeasurementsByAdministrator.action" onclick="javascript:startCfaPB()">Member Measurements</a></li>
</s:if>

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    相关资源
    最近更新 更多