繁体   English   中英

比较Struts2中的字符串 <s:if> 标签

[英]Comparing Strings in Struts2 <s:if> Tag

我有一个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>

accessType设置为GUEST 但是,即使用户尚未登录,它也会进入else-block。

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

更新:
我从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>块。
  2. 访问类型未打印(以某种方式未设置)。

您正在比较s:if语句中的字符串,并且在变量中使用字符串值时,它在测试文件中工作良好。 因此, "'GUEST'"起作用了。 没有引号的OGNL试图解析双引号中的值,如果它在值堆栈中找不到名为GUEST的变量,则返回null 然后,您尝试打印此值,该值将转换为空字符串。 您还已经在JSP中对'GUEST'的值进行了硬编码,这不好。

解决方案:您不应该在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>

我找到了罪魁祸首。

要在Struts2 var中设置String值,请执行以下行:

<s:set var="accessType" value="GUEST" />

应该:

<s:set var="accessType" value="'GUEST'" />

当放在value=""属性中时,单引号('')必须括在String文字上。

如果检查正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM