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