首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么String.equals()方法在JSTL标记<c:if>中不能工作?

为什么String.equals()方法在JSTL标记<c:if>中不能工作?
EN

Stack Overflow用户
提问于 2015-04-05 09:55:25
回答 2查看 1.1K关注 0票数 1

代码的用途:验证来自用户的输入字符串。如果用户输入他的名字,存储为'n',作为"James“,那么消息”已验证!“会显示。(一个单独的HTML表单负责输入字符串)

尽管没有任何错误,但是标记中的测试失败了,无论输入字符串是否为"James“,消息都不会显示。

代码语言:javascript
代码运行次数:0
运行
复制
<body>

    <%  String n = (String)request.getParameter("n");
           String t = "James";
    %>

    Message <!-- Default message displayed to show that HTML body is read. -->

    <c:if test="${t.equals(n)}"> 
        <c:out value="Validated!"/>
    </c:if>

</body>

如果我要在花括号内用true替换测试条件,则If条件会通过,并且消息“已验证!”会显示。

为什么equals()方法在JSTL标记中不能工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-05 10:00:15

  1. 您还没有将变量保存到范围中。

你必须这样做,否则EL不会看到你的变量。

保存变量以请求作用域

代码语言:javascript
代码运行次数:0
运行
复制
<c:set var="n" value="${param.n}" scope="request"/>
<c:set var="t" value="James" scope="request"/>

您需要使用EL的eq运算符而不是Java的.equals()

更改代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
<c:if test="${t eq n}"> 
  <c:out value="Validated!"/>
</c:if>

您的JSP文件包含了一些错误的脚本,而且这种方法是不安全的。

将逻辑和视图分开(如描述的here )会更好。

票数 2
EN

Stack Overflow用户

发布于 2015-04-05 10:07:17

您可以这样使用普通的==比较运算符:

代码语言:javascript
代码运行次数:0
运行
复制
<c:if test="${t == n}"> 
    <c:out value="Validated!"/>
</c:if>

如果需要比较字符串值而不是对象的属性,可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
<c:if test="${t == 'Any string can be here'}"> 
    <c:out value="Validated!"/>
</c:if>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29456119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档