Как я могу изменить специальный скрипт JSP JSTL? - PullRequest
1 голос
/ 09 декабря 2010

Я хочу изменить все скриптлеты на моих страницах jsp на 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>

и еще одна проблема с ArrayList, который содержит список объектов группы, в цикле я хочу получить каждый объект группы и проверить определенный метод внутри объекта группы, как я могу добраться до этих методов через 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>

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Для первой части

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 голос
/ 09 декабря 2010

Что касается № 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>

Адел Ансари ответил за номер 2 для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...