Java 为什么';t String.equals()方法在JSTL核心标记内工作<;c:如果>;?
代码的用途:验证用户输入的字符串。如果用户输入其姓名(存储为“n”)为“James”,则显示消息“Validated!”。 (一个单独的HTML表单负责输入字符串) 尽管没有任何错误,但是标记内的测试失败,并且无论输入字符串是否为“James”,都不会显示消息Java 为什么';t String.equals()方法在JSTL核心标记内工作<;c:如果>;?,java,html,jsp,jstl,el,Java,Html,Jsp,Jstl,El,代码的用途:验证用户输入的字符串。如果用户输入其姓名(存储为“n”)为“James”,则显示消息“Validated!”。 (一个单独的HTML表单负责输入字符串) 尽管没有任何错误,但是标记内的测试失败,并且无论输入字符串是否为“James”,都不会显示消息 消息 如果我在花括号内将测试条件替换为true,则If条件通过并显示消息“Validated!” 为什么equals()方法不能在JSTL标记中工作 您没有将变量保存到范围 你必须这样做,让EL看到你的变量 将变量保存到请求范围: 另
消息
如果我在花括号内将测试条件替换为true,则If条件通过并显示消息“Validated!”
为什么equals()
方法不能在JSTL标记中工作
您最好按照说明分离逻辑和视图您可以通过以下方式使用普通的比较运算符:
<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>
n
是可变的,而不是字符串:)如果我们需要比较字符串值,而不是它们是否引用相同的对象,您的建议是什么?为了比较两个字符串是否相似,我相信使用Java中的equals()方法,而不是==运算符。据我所知,==运算符比较两个操作数(变量)是否引用同一个对象。我在这方面错了吗?我认为eq转换为==所以我的问题仍然有效。在任何情况下,您能告诉我如何比较标记中的两个字符串是否具有相同的值吗?@user311418如果我没有记错的话,在EL world中,您假设基元类型不存在(即使是bean通常也使用诸如Integer
之类的包装类型,而不是基元int
,通过使用null来允许未设置状态)所以=
相当于eq
,表示equals
方法。不过感谢您的链接!在EL中,eq
和=
的工作原理与Java中的.equals()
完全相同-它是比较对象的值,而不是它们对对象的引用。
<c:if test="${t eq n}">
<c:out value="Validated!"/>
</c:if>
<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>