簡體   English   中英

如何將特殊的jsp scriptlet更改為jstl?

[英]how can I change special jsp scriptlet to jstl?

我想將我的jsp頁面中的所有scriptlet更改為jstl,如何將這段代碼更改為jstl

    <%     Map validationResults = (HashMap) request.getAttribute("validationResults");%> 
    <% if (validationResults != null) {
           if (validationResults.containsKey("userName")) {  //how can i chage this line to jstl ?
    %>
    <%=((ValidationResult) (validationResults.get("userName"))).getDetails()%> //how can i chage this line to jstl too ?
  <%}%>
 <%}%>

我的JSTL

<c:set var="validationResults" value="validationResults" scope="request"></c:set>
   <c:if test="validationResults != null">   
  //how can i change the code of map here? 
   </c:if>

還有一個包含Group對象列表的ArrayList問題,在循環中我想獲取每個Group對象並檢查Group對象內部的特定方法,如何通過jstl到達這些方法?

我想更改此代碼

    <%List<Group> allGroupList = new ArrayList<Group>();
        allGroupList = (ArrayList) request.getAttribute("groups");%>

       <% for (int index = 0; index < allGroupList.size(); index++) {%>
       <%Group aGroup = (Group) allGroupList.get(index);%>
        <label ><%=aGroup.getGroupEName()%></label>
        <%if (aGroup.isIsUserGroup()) {%>
        <input type="checkbox" name="group" value="<%=aGroup.getGroupNo()%>" CHECKED />
         <%} else {%>
         <input type="checkbox" name="group" value="<%=aGroup.getGroupNo()%>"  />
       <%}%>
   <%}%>

這是我更改的代碼:

<jsp:useBean id="GroupBean" class="ps.iugaza.onlineinfosys.entities.Group" type="ps.iugaza.onlineinfosys.entities.Group" scope="reqeust">
<c:set var="allGroupList" value="groups" scope="request"></c:set>
<c:forEach var="grp" items="${allGroupList}" varStatus="status">
        //?????? what should i do ?
 </c:forEach>

對於第一部分

JSTL和EL僅適用於遵循Java Bean約定的方法。 如果您真的想走這條路,那么您可以在map繞一圈。

<c:forEach items="${requestScope.validationResults}" var="mapEntry" varStatus="index">
    <c:if test="${mapEntry.key == 'userName'}">
        <tr>
            <td>${mapEntry.value.details}</td>
        </tr>
    </c:if>
</c:forEach>

另一種方法是從地圖中獲取userName ,並檢查其是否為null ,然后執行您喜歡的任何操作。 這確實是一個更好的主意。

<c:if test="${requestScope.validationResults['userName'] != null}">
    <tr>
        <td>${requestScope.validationResults['userName'].details}</td>
    </tr>
</c:if>

對於第二

<c:forEach var="grp" items="${requestScope.groups}" varStatus="status">
    <label>${grp.groupEName}</label>
    <input type="checkbox" name="group" value="${grp.groupNo}" ${grp.isUserGroup ? 'checked' : ''} />
</c:forEach>

至於1),您將必須通過操作/控制器來填充您的request ,並具有一個JSTL腳本來遍歷您的地圖,如下所示:

警告: 未經測試

<c:if test="${requestScope.validationResults != null}">
    <c:forEach var="entry" items="${requestScope.validationResults}">
        <c:if test="${entry.key == 'userName'}">
            Result: ${entry.value.details};
        </c:if>
    </c:forEach>
</c:if>

Adeel Ansari為您回答了2號。

暫無
暫無

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

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