Переключение оператора / итерации в JSTL с использованием коллекции пользовательских тегов - PullRequest
0 голосов
/ 02 марта 2012

HelloTag.Java

public class HelloTag extends SimpleTagSupport {

@Override
public void doTag() throws JspException, IOException {
    JspWriter out = getJspContext().getOut();

    ArrayList outerList = new ArrayList();
    ArrayList innerList = null;
    for (int i = 0; i < 5; i++) {
        innerList = new ArrayList();
        innerList.add("1");
        innerList.add("Name");
        outerList.add(innerList);
    }
    for (int i = 0; i < outerList.size(); i++) {
        for (int j = 0; j < innerList.size(); j++) {
            out.println(innerList.get(j));
        }
    }
}
}

В файле JSP, Существует следующий фрагмент кода:

 <body>
    <ct:Hello></ct:Hello>
</body>

Когда я запускаю файл JSP, этот файл показывает точный результат; но

Я хочу принять решение по каждому значению из класса пользовательских тегов

например

 <c:set var="name" scope="" value=""/>
 <c:choose>
 <c:when test="${name == 1}">
  This is Your ID:-
 </c:when>
 <c:otherwise>
    This is Your Name
 </c:otherwise>
 </c:choose>

Приведенный выше код только для примера. Пожалуйста, сообщите мне, как принять решение по каждому значению, которое приходит из класса пользовательских тегов.

Другой способ объяснить мою проблему состоит в том, что я хочу сохранить каждое значение в переменной, а затем принять решение об этом значении, просто используя JSTL без тегов Scriplet, сосредоточив внимание на вышеописанном сценарии ( HelloTag.Java )

1 Ответ

2 голосов
/ 02 марта 2012

Не совсем понятно, о чем вы спрашиваете. Но твой тэг, как он есть, просто проходит по каждому внутреннему списку внешнего списка (ну, на самом деле, я думаю, что он должен это делать, но у него есть ошибка, поэтому он этого не делает).

Вам не нужен пользовательский тег для этого, так как тег JSTL <c:forEach> уже делает это. Предположим, у вас есть externalList, хранящийся в атрибуте запроса (или страницы, или сеанса, или приложения):

<%-- iterate through the outer list --%>
<c:forEach var="innerList" items="${outerList}">
    <%-- iterate through the innerList --%>
    <c:forEach var="element" items="${innerList}">
        <%-- do what you want with the element --%>
    </c:forEach>
</c:forEach>

Из твоего вопроса мне кажется, что у тебя не должно быть внутреннего списка. Скорее, внешний список должен содержать объекты (например, экземпляры класса Person), которые имеют методы getId() и и getName(). Цикл будет таким:

<%-- iterate through the outer list --%>
<c:forEach var="person" items="${personList}">
    ID : ${person.id}<br/>
    Name : <c:out value="${person.name}"/>
</c:forEach>
...