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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Struts + JSTL 
V
    Опции темы
svby
Дата 7.8.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.6.2005

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



Нужно в Struts-тег вложить выражение JSTL. Вторая строчка не работает. Как правильна записать?
Код

<c:set var="isbn" value="${per.value.disk.disk_id}"/>
<html:text property='<c:out value="${isbn}"/>' value='<c:out value="${per.value.quantity}"/>' />




PM MAIL   Вверх
gEndelf
Дата 9.8.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 7.7.2005
Где: the world

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



а зачем ты в поле property подставляешь значение ?
там должно быть название геттера

ну а если в input необходимо подставить значение и имя, то делается так

Код

<html:text property="название геттера для этого поля" value="${per.value.quantity}" />


Это сообщение отредактировал(а) gEndelf - 9.8.2005, 19:00
PM MAIL WWW   Вверх
kkorsakoff
Дата 4.4.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня почему-то выводится строка без обработки, т.е. что-то вроде ${screenname.screenname}.
<c:out> вообще работает.

Приходится выводить при помощи нелепой конструкции
value="<%=((Screenname)pageContext.getAttribute("screenname")).getScreenname()%>"
PM MAIL WWW ICQ   Вверх
kkorsakoff
Дата 4.4.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Решил не создавать новую тему.

Сегодня был первый практический опыт применения технологии JSTL. Первые впечатления:

Уменьшает количество скриплетов, повышает читаемость кода. Однако, кто сказал, что тому же дизайнеру будет проще работать с <c:out..>, чем с <%=...%>. Это еще не факт.

Итерация радует донельзя.

Но не могу сделать простейшие вещи (или не умею?):

1. Раз уж мы все рабочие данные поместили в аттрибуты (страницы/запроса/сессии/приложения), то должен быть простой спрособ вынимать эти данные в любом месте, а не только в тэгах <c:...>
Наглядный пример - мой пост выше.

<html:text property="..." value="${per.value.quantity}" /> - выводит ${per.value.quantity}, вместо значения этого поля.

2. Полная невозможность получать данные для манипулирования из методов с параметрами (не знаю как их правильно назвать).

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

Страница messages.jsp - запрос к БД в самой странице не делаем, а имеем класс, который выполняет всю логику. Назовем его Main. Объект класса всегда лежит в applicationScope. Чтобы получить список друзей/сообщений необходимо вызвать метод

Main.getNewMessages(String account);

Получается при помощи чистого JSTL коллекцию уже не получить.

Приходится в начале страницы вставлять

Код

<%
Main main=(Main)application.getAttribute(Main.APPLICATION_ATTRIBUTE_KEY);
...
pageContext.setAttribute("newMessages",newMessages)
%>

, а затем работать через ${newMessages}

Теряется суть JSTL - где же тут упрощение.

Или абсолютно все зашивать в Action'ы и передавать в jsp чистые данные в виде готовых переменных, коллекций, объектов...

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

Поясните, может я архитектурно что-то не так понимаю.

3. if есть, else нет. Ну ладно, переживем....(всё повышаем читаемость) smile

4. Что больше всего не понравилось - отсутствие возможности использовать константы в выражениях jstl.

Хочу сделать простейшую проверку, что человек залогинился и его статус - не заблокирован

Код

<c:if test="${(empty sessionScope.Passport) || (sessionScope.Passport.status==Passport.STATUS_BLOCKED)}">
...redirect...
</c:if>


выдает ошибку

javax.servlet.jsp.JspTagException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "test" with value "${(empty sessionScope.Passport) || (sessionScope.Passport.status==Passport.STATUS_BLOCKED)}": Unable to find a value for "STATUS_BLOCKED" in object of class "....Passport" using operator "."

Это сообщение отредактировал(а) kkorsakoff - 5.4.2006, 00:12
PM MAIL WWW ICQ   Вверх
zera
Дата 5.4.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



по пункту 3 - есть же <c:choose> <c:when>...</c:when>[<c:otherwise>..</c:otherwise>]</c:choose>
1 и 2 - в силу незнания стратса не отвечу, но ${main.newMessage} -должно работать. и <c:out зачастую не нужен

Это сообщение отредактировал(а) zera - 5.4.2006, 13:00
PM MAIL   Вверх
kkorsakoff
Дата 5.4.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не работает ни в аттрибутах стратсах, ни просто в хтмле. Работает ${} только в тегах JSTL
PM MAIL WWW ICQ   Вверх
zera
Дата 6.4.2006, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если в web.xml
Код

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
- то не работает, уже за давностью забыл, если честно.
а вот если
Код

<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

- работает. первый пример под рукой оказался.
Код

          var answer = confirm("Запись будет удалена. Вы согласны?");
          if (answer==true) {
            var answerurl = '${viewConf.operationView}?cmd=delete&amp;object.id='.concat(_vars['selectedNode'][0].nodeValue);
            bpc.execute('<s:task b:action="load" b:url="'+answerurl+'" b:destination="id(\'${viewConf.confirmView}\')" b:mode="replace" />');
          };

или мы о разном говорим? smile
PM MAIL   Вверх
kkorsakoff
Дата 6.4.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



О том, о томsmile
Спасибо!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0889 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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