代码的用途:验证来自用户的输入字符串。如果用户输入他的名字,存储为'n',作为"James“,那么消息”已验证!“会显示。(一个单独的HTML表单负责输入字符串)
尽管没有任何错误,但是标记中的测试失败了,无论输入字符串是否为"James“,消息都不会显示。
<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标记中不能工作?
发布于 2015-04-05 02:00:15
你必须这样做,否则EL不会看到你的变量。
保存变量以请求作用域
<c:set var="n" value="${param.n}" scope="request"/>
<c:set var="t" value="James" scope="request"/>
您需要使用EL的eq运算符而不是Java的.equals()
。
更改代码如下:
<c:if test="${t eq n}">
<c:out value="Validated!"/>
</c:if>
您的JSP文件包含了一些错误的脚本,而且这种方法是不安全的。
将逻辑和视图分开(如描述的here )会更好。
发布于 2015-04-05 02:07:17
您可以这样使用普通的==
比较运算符:
<c:if test="${t == n}">
<c:out value="Validated!"/>
</c:if>
如果需要比较字符串值而不是对象的属性,可以这样做:
<c:if test="${t == 'Any string can be here'}">
<c:out value="Validated!"/>
</c:if>
https://stackoverflow.com/questions/29456119
复制