Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSTL проблема с <c:if></c:if> 
:(
    Опции темы
boroda
Дата 23.10.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2005
Где: Киев

Репутация: 1
Всего: 1



Добрый день!
  Как мне организовать такое условие
Код

          <%if(!searchObj.getSearchResult().isEmpty())
          {
              out.println("FULL<br>");
          }

используя JSTL. Т.е. пишу 
Код

        <c:if test="${searchObj.getSearchResult().isEmpty()}">
           FULL<br>
        </c:if>


на выходе The function getSearchResult must be used with a prefix when a default namespace is not specified

getSearchResult() возвращает ArrayList

Спасибо!
PM MAIL   Вверх
ainkin
Дата 23.10.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 15.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: нет



<c:if test="${!searchObj.searchResult.empty}">
    ...
</c:if>

В выражениях EL пишутся имена свойств, скобки не пишутся. getSearchResult -- это метод, реализующий свойство searchResult. Т.е. отбрасываешь "get" и первую букву делаешь маленькой. "is" заменяет "get" для свойств типа boolean.

Это сообщение отредактировал(а) ainkin - 23.10.2006, 19:08
PM WWW   Вверх
boroda
Дата 24.10.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2005
Где: Киев

Репутация: 1
Всего: 1



Не работает, вот такая ошибка
Код

"${searchObj.searchResult.empty}" contains invalid expression(s): javax.servlet.jsp.el.ELException: Encountered "empty", expected one of [<IDENTIFIER>]


  Но я не понимаю две вещи

1. searchObj - есть бин. Соответсвенно поле класса searchResult есть private. Т.е. по идее я не могу напрямую обратиться к полю класса.
2. isEmpty() это метод класса ArrayList, как он трансформируется в поле класса empty?

Спасибо.
P.S. Извините за глупые вопросы, но непонятно + не могу найти в документации то что нужно.... хотя конечно наверно плохо искал.
PM MAIL   Вверх
y3u
Дата 24.10.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



нельзя использовать в EL в методах бина зарезервированные слова, в частности у коллекции метод isEmpty(), т.к. в EL есть функциюшка empty, которая проверяет коллекцию на null и на empty...
так что правильно будет вот так

Код

<c:if test="${not empty searchObj.searchResult}">
    ...
</c:if>


Цитата

1. searchObj - есть бин. Соответсвенно поле класса searchResult есть private. Т.е. по идее я не могу напрямую обратиться к полю класса.

только через паблик и НЕ статик геттер getSearchResult()

Цитата

isEmpty() это метод класса ArrayList, как он трансформируется в поле класса empty?


в EL просто опускаются префиксы методов доступа к филдам бинов - это все в спецификации описано, т.е. get, set, is, has и т.п....

Это сообщение отредактировал(а) y3u - 24.10.2006, 11:56


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
boroda
Дата 24.10.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2005
Где: Киев

Репутация: 1
Всего: 1



спасибо y3u все работает.
ainkin тебе тоже большое спасибо
PM MAIL   Вверх
boroda
Дата 27.10.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2005
Где: Киев

Репутация: 1
Всего: 1



что бы не создавать новую тему решил еще вопрос задать здесь
опять мое непонимание с <c:if>

как организовать условие
Код

              <select name="sCountry">
              <option value="99"></option>
                <c-rt:forEach items="<%=EPB.getCountry()%>" var="countryItem">
                   <jsp:useBean id="countryItem" type="java.util.Map"/>
                   <c-rt:if test="${searchObj.country==как указать элемент countryItem}">
                   <option selected value="<%=countryItem.get("id_country")%>"><%=countryItem.get("name_country")%></option>
                     </c-rt:if>
                   <option value="<%=countryItem.get("id_country")%>"><%=countryItem.get("name_country")%></option>
                  </c-rt:forEach>
              </select>



хочу получить вот это
Код

                   <%if(searchObj.getCountry().equals((String)countryItem.get("id_country"))){%>


Спасибо
PM MAIL   Вверх
y3u
Дата 27.10.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



во первых, скриптлеты - абсолютное зло... используй JSTL и EL...
Код

<jsp:useBean id="countryItemBean" type="java.util.Map"/>

<select name="sCountry">
    <option value="99"></option>
    <c:forEach items="<%=EPB.getCountry()%>" var="i">
        <option 
                value="<c:out value="${countryItemBean.id_country}"/>"
                <c:if test="${searchObj.country eq countryItemBean[i]}">selected="true"</c:if>
        ><c:out value="${countryItemBean.name_country}"/></option>
    </c:forEach>
</select>


я в суть твоего кода не вникал, но по-моему там что-то происходит неправильное...
от <%=EPB.getCountry()%> надо избавиться тоже б... сделать по-нормальному через JSTL...



--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
batigoal
Дата 28.10.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(y3u @  27.10.2006,  16:34 Найти цитируемый пост)
во первых, скриптлеты - абсолютное зло... используй JSTL 

Я вот никак не могу понять, почему скриптлеты считаются злом, а JSTL - нет? Ведь то же самое кодирование, только операторы заменяются на XML-теги.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
zera
Дата 28.10.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



Цитата(y3u @  27.10.2006,  15:34 Найти цитируемый пост)

Код

<c:forEach items="<%=EPB.getCountry()%>" var="i">


а эта конструкция, вроде бы, не должна заработать, в items разве можно rtexpvalue использовать? 
PM MAIL   Вверх
y3u
Дата 28.10.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



Цитата(batigoal @  28.10.2006,  11:58 Найти цитируемый пост)
Я вот никак не могу понять, почему скриптлеты считаются злом, а JSTL - нет? Ведь то же самое кодирование, только операторы заменяются на XML-теги. 


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

Добавлено @ 12:24 
Цитата(zera @  28.10.2006,  12:19 Найти цитируемый пост)
а эта конструкция, вроде бы, не должна заработать, в items разве можно rtexpvalue использовать?  


и не будет... там надо begin и end использовать... я чего то пропустил smile


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
zera
Дата 28.10.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



упс, нет-нет. я конкретно про это 
Код

<c:forEach items="<%=EPB.getCountry()%>">

в изначальном примере и использовалось не c:, a c-rt:.
по описанию нельзя использовать именно items="<%=EPB.getCountry()%>". 

Цитата(batigoal @  28.10.2006,  11:58 Найти цитируемый пост)
Я вот никак не могу понять, почему скриптлеты считаются злом, а JSTL - нет?

вопрос вопросов. ведь сам так считаю, а почему? smile 
PM MAIL   Вверх
boroda
Дата 30.10.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2005
Где: Киев

Репутация: 1
Всего: 1



Да действительно я изначально использовал не c:, a c-rt:.

паралельно вопрос, чем принципиально отличаеться c-rt от с:, за исключением того что в с:rt меньше тэгом. К примеру нету c:out

PM MAIL   Вверх
zera
Дата 31.10.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



так нельзя
Код

<c:forEach items="<%=EPB.getCountry()%>">
, а так можно
Код

<c-rt:forEach items="<%=EPB.getCountry()%>">
. если я еще правильно помню про c-rt, то именно этим.  smile 
PM MAIL   Вверх
boroda
Дата 31.10.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2005
Где: Киев

Репутация: 1
Всего: 1



Цитата(zera @ 31.10.2006,  14:35)
так нельзя
Код

<c:forEach items="<%=EPB.getCountry()%>">
, а так можно
Код

<c-rt:forEach items="<%=EPB.getCountry()%>">
. если я еще правильно помню про c-rt, то именно этим.  smile

Работает и в том и в другом случае smile
PM MAIL   Вверх
y3u
Дата 31.10.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



да блин, судя по тому, что в офф доках про эту иплементацию спеки JSTL core нет ни слова, я бы не стал на нее расчитывать, а пользовался стандартным тегом c


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.