代码的目的:验证用户的输入字符串。如果用户输入他的姓名,则存储为' 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条件通过并且消息&#34; Validated!&#34;显示。
为什么equals()
方法不能在JSTL标记内工作?
答案 0 :(得分:2)
你要做到这一点让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>
P.S。您的JSP文件包含不良做法的scriptlet,并且方法不安全。
最好按照here
所述分隔逻辑和视图答案 1 :(得分:1)
您可以通过以下方式使用普通==
比较运算符:
<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>