比较 Struts2 标签中的字符串

2024-02-26

我有一个index.jsp页面,其中某些元素根据用户是否登录而打开/关闭。

<head>
    <s:set var="accessType" value="GUEST" />
    <s:if test="#session.containsKey('currentAccessType')">
        <s:set var="accessType" value="#session.currentAccessType" />
    </s:if>
</head>

<body>
    <nav>
        <s:if test="#accessType.equals('GUEST')">
            <ul>
                <li><a href="index.jsp">Home</a></li>
                <li><a href="#">Login</a></li>
                <li><a href="http://www.mywebsite.com" target="_blank">Main Site</a></li>
            </ul>
        </s:if>

        <s:else>
            <ul>
                <li><a href="index.jsp">Home</a></li>
                <li><a href="#">Control Panel</a></li>
                <li><a href="#">Logout</a></li>
                <li><a href="http://www.mywebsite.com" target="_blank">Main Site</a></li>
            </ul>
        </s:else>
    </nav>
</body>

The accessType被设定为GUEST。但是,即使用户尚未登录,它也会进入 else 块。

我在字符串比较中犯了错误吗?

UPDATE:
我从 index.jsp 中删除了会话部分只是为了查看,它现在看起来像这样:

<head>
    <s:set var="accessType" value="GUEST" />
    <!-- removed session code for testing -->
</head>

<body>
    <nav>
        <s:if test="#accessType.equals('GUEST')">
            <ul>
                <li><a href="index.jsp">Home</a></li>
                <li><a href="#">Login</a></li>
                <li><a href="http://www.mywebsite.com" target="_blank">Main Site</a></li>
            </ul>
        </s:if>

        <s:else>
            <ul>
                <li><a href="index.jsp">Home</a></li>
                <li><a href="#">Control Panel</a></li>
                <li><a href="#">Logout</a></li>
                <li><a href="http://www.mywebsite.com" target="_blank">Main Site</a></li>
            </ul>
        </s:else>
    </nav>

    <br />

    Access type is <s:property value="#accessType" />.
</body>

问题:

  1. 条件进入<s:else> block.
  2. 访问类型未打印(不知何故未设置)。

您正在比较中的字符串s:if语句,当您使用变量的字符串值时,它在测试文件中运行良好。所以,"'GUEST'"工作了。如果没有引号,OGNL 会尝试解析双引号中的值,如果找不到名为的变量GUEST在它返回的值栈中null。然后您尝试打印这个转换为空字符串的值。您还硬编码了'GUEST'在JSP中,这不太好。

解决方案:业务逻辑不应该用JSP 编写。您应该在操作中定义会话变量并在 JSP 内访问此会话变量,而不是根据某些逻辑条件重新定义变量值。

<head>
<!--
    <s:set var="accessType" value="GUEST" />
    removed session code for testing -->
</head>

<body>
    <nav>
        <s:if test="#session.currentAccessType.equals('GUEST')">
            <ul>
                <li><a href="index.jsp">Home</a></li>
                <li><a href="#">Login</a></li>
                <li><a href="http://www.iacademy.edu.ph" target="_blank">Main Site</a></li>
            </ul>
        </s:if>

        <s:else>
            <ul>
                <li><a href="index.jsp">Home</a></li>
                <li><a href="#">Control Panel</a></li>
                <li><a href="#">Logout</a></li>
                <li><a href="http://www.iacademy.edu.ph" target="_blank">Main Site</a></li>
            </ul>
        </s:else>
    </nav>

    <br />

    Access type is <s:property value="#session.currentAccessType" />.
</body>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较 Struts2 标签中的字符串 的相关文章