JSTL точная спецификация содержимого тела

#java #jsp #tomcat #jstl

#массивы #jsp #jstl

Вопрос:

может кто-нибудь подсказать, как можно интерпретировать <c:set> тело?

  • <c:set var="movieList">One,Two,Three</c:set>

  • <c:set var="movieList">"One","Two","Three"</c:set>

в первом случае movieList это строка, а во втором — массив {"One", "Two", "Three"}

что movieList в этих примерах:

  • <c:set var="movieList">"On"e","Tw"o","Thr"ee"</c:set>

  • <c:set var="movieList">"On"e","Tw"o","Thr"ee"</c:set>

Комментарии:

1. Что заставляет вас думать, что любой из них является массивом? Это все просто строки.

Ответ №1:

Нет разницы в интерпретируемом Java-типе c:set тела. Это во всех случаях просто String .

Даже если вы задаете нестроковый тип в качестве c:set тела, используя EL, такой как

 <c:set var="foo">${bean.someInteger}</c:set>
  

в String любом случае оно будет преобразовано в String#valueOf() с помощью.

Только при последующей обработке переменной может возникнуть разница, в зависимости от того, как вы ее обработали. Например,

 <c:set var="movieList">One,Two,Three</c:set>
<c:set var="realMovieArray" value="${fn:split(movieList, ',')}" />
  

результатом будет ${realMovieArray} быть String[] со значениями One , Two и Three .

Комментарии:

1. похоже, что вы правы, но я нахожу этот пример: velocityreviews.com/forums / … — взгляните на последнее сообщение в теме. Итак, мне нужна некоторая ссылка на спецификацию…

2. Этот человек несет чушь. Такой ответ был бы отклонен в небытие здесь, чтобы для неосведомленного посетителя было ясно, что это плохой ответ.

3. @BalusC, этот человек был прав. Пожалуйста, пересмотрите свой ответ.

4. @DylanYi String[] yankees = ... и <c:set var="yankees">... это не одно и то же. Первый создает массив строк, второй создает единственную строку. Таким образом, BalusC прав, говоря, что это бессмыслица. Тот факт, что <c:forEach> будет выполнять итерацию массива, а тот <c:forEach> будет разбивать и повторять строку, так что кажется , что оба они выполняют одно и то же, является следствием того, как <c:forEach> реализовано, и не имеет ничего общего с <c:set> , и вопрос только в <c:set> .

5. @Andreas, ты прав. Два фрагмента кода не совпадают, даже если они приводят к одному и тому же результату. Я видел только выходные данные.

Ответ №2:

 <c:set var="alphabet">A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z</c:set>

<c:forTokens items="${alphabet}" delims="," var="letter">
    ${letter}
</c:forTokens>