簡體   English   中英

為什么 String.equals() 方法在 JSTL Core 標記中不起作用<c:if> ?

[英]Why doesn't String.equals() method work inside the JSTL Core tag <c:if>?

代碼目的:驗證來自用戶的輸入字符串。 如果用戶輸入他的姓名,存儲為“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 標記內不起作用?

  1. 您尚未將變量保存到范圍

您必須這樣做,否則 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>

PS 您的 JSP 文件包含不安全的腳本,並且該方法不安全。

這里描述的邏輯和視圖分開會更好

您可以通過這種方式使用普通的==比較運算符:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM