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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> taglib-ы в jsp 
V
    Опции темы
Eugenia12
Дата 27.1.2012, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Есть таблица в БД, из которой считываются данные, а именно поля id, name и hidden.
Класс Section содержит поля id, name и hidden.
Класс Sections extends TreeSet<Section>.
Считываемые данные из БД заноситься в класс Sections, который создаётся в обработчике тэга, а затем, используя итератор, потоком вывода и установкой атрибутов pageContext объекты Sections отображаются в jsp.

При первом обращении к этой jsp данные считываются из БД и отображаются как надо, но при изменении этих данных в БД (например редактировании или добавлении новой записи в БД) и обновлении страницы ничего не изменяется, в jsp как было всё так и остаётся(

Только после reload сервера и обновлении страницы можно увидеть обновлённые данные БД.
Кста если использовать в jsp вместо пользовательского тэга javaBean, то всё работает и отображается норм. А вот с taglib какая-то беда... только после перезапуска сервера...
Почему так происходит? Куда копать?

Класс обработки тэга:

Код

public class SectionsTag extends BodyTagSupport {
    private Sections sections = new Sections();
    private Iterator it;
 
    @Override
    public int doStartTag () {
        it = sections.iterator();
            if (it.hasNext()) {
            try {
                processNextOption();
            } catch (IOException ex) {
                Logger.getLogger(SectionOptionsTag.class.getName()).log(Level.SEVERE, null, ex);
            }
                return EVAL_BODY_AGAIN;
            } else {
                return SKIP_BODY;
            }
    }
 
    @Override
    public int doAfterBody () {
            try {
                bodyContent.writeOut(getPreviousOut());
            } catch (IOException ex) {
                Logger.getLogger(ArticleOptionsTag.class.getName()).log(Level.SEVERE, null, ex);
            }
            bodyContent.clearBody();
            if (it.hasNext()) {
                try {
                    processNextOption();
                } catch (IOException ex) {
                    Logger.getLogger(ArticleOptionsTag.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else {
                return SKIP_BODY;
            }
            return EVAL_BODY_AGAIN;
    }
 
    private void processNextOption () throws IOException {
        Section section = (Section) it.next();
        pageContext.setAttribute("id", section.getId());
        pageContext.setAttribute("name",section.getName());
        pageContext.setAttribute("hidden", section.isHidden());
    }



Часть кода jsp:

<%@taglib uri="/WEB-INF/tlds/options.tld" prefix="options"%>
<html> ...
<options:Sections>
                                <tr>
                                    <td>
                                        <input type="checkbox"
                                               name="sections" value="${id}"/>
                                    </td>
                                    <td>
                                        <a href="edit.action?param=sections&val=${name}">
                                            ${name}</a>
                                    </td>
                                </tr>
</options:Sections>
</html>
PM MAIL ICQ Skype   Вверх
Eugenia12
Дата 27.1.2012, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос решён!
Инициализацию TreeSet-a 
private Sections sections = new Sections(); нужно было оставить null, т е
private Sections sections;

а в doStartTag () присваивать уже
sections = new Sections();
чтобы при каждом вызове тэга
TreeSet заполнялся заново из БД.

А то получалось что TreeSet инициализировался один раз при развёртывании приложения, отсюда и TreeSet повторно заполнялся обновлёнными данными из БД только после перезагрузки сервера и соответственно reload-a контекста.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0398 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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