![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
carper |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
STRUTS 2.0.14
Есть jsp страничка (struts.xml см. ниже, после описания проблемы) :
Выводится, что и ожидалось : Привет 1 InlineHello Привет 2 Теперь ПОСЛЕ (т.е. ДО можно добавлять сколько угодно) тэга "<s:action" добавим любой другой тэг от Struts (HTML тэги рендерятся без проблем) ну, например :
Результат: Привет 1 ВСЁ! На тэге <s:action рендеринг странички заканчивается! Причем не отображается даже результат самого s:action (flush = "true" или flush="false" не помогает). Вопрос: почему и как этого избежать? (Что-то происходит с ActionContext? Но почему не обрабатывается хотя бы сам s:action?) Может быть я не верно понимаю назначение этого тэга? struts.xml:
includedPage.jsp состоит из одной текстовой строки - InlineHello Action, по сути заглушка:
|
||||||||
|
|||||||||
MisterCleric |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет. Слушай, может теги не так используешь?
например:
вот так, наверное
так как у тебя нету тела тега. Оно нужно, если ты хочешь передать экшену параметры
и аналогично с
Вот так наверное
Добавлено через 19 секунд по крайней мере у меня так работает Добавлено через 1 минуту и 59 секунд и такое замечание: если ты делаешь просто экшен заглушку, то она и не нужна вот должно быть
По дефолту будет создаваться экземпляр com.opensymphony.xwork2.ActionSupport -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||||||||||
|
|||||||||||||
carper |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Что касается action как заглушки, так это он у меня ПОКА заглушка.
![]() Тэги пробовал писать и с телом и без (кстати, в Html допустимо любое написание, не думаю, что здесь иначе). Не работает. Конечно обнадеживает, что хотя бы у других срабатывает, но просто шайтан какой-то нашел. :( Остается подозрение на состав библиотек в WEB-INF/lib (возможно какой-то интерцептор чего-то там левое подтягивает) у меня там сейчас: antlr-2.7.2.jar commons-logging-1.0.4.jar commons-logging-api-1.1.jar freemarker-2.3.8.jar jsf-api.jar jsf-impl.jar jstl-1.2.jar ognl-2.6.11.jar struts2-core-2.0.14.jar xwork-2.0.7.jar |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
вроде все правильно.
Не понятно зачем jsf... а такое в jsp есть
-------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
carper |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
jsf, ну предполагается в дальнейшем проекте использовать, пока незачем - ничего сейчас в проекте нет, начал щупать и вот ...
У меня: <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="Windows-1251" %> <%@ taglib prefix="s" uri="/struts-tags" %> Не знаю, кажется я начинаю понимать, где таятся сии чудеса (прошу прощения, сразу не предупредил, думал не имеет отношения к задаче - не хотел писать километровый пример). ![]() Сейчас поясню: хотелось чтобы по вводе в строке браузера: мой_сайт/index.html - на самом деле вызвался action. Насколько я помню я могу замапить ФИЛЬТР (org.apache.struts2.dispatcher.FilterDispatcher) на любое расширение/я, но не на конкретный файл! Т.е. если я не хочу, чтобы диспетчер пытался трактовать ВСЕ мои файлы с расширением html как action, а только, скажем, index.html, то так сделать нельзя. Поэтому я написал сервлет, замаппил его на index.html, а из самого сервлета вызываю нужный action. Все работает прекрасно, все тэги STRUTS 2, само перенаправление и т.п. Поэтому и не возникло никаких подозрений, когда вдруг вылезла странная проблема с s:action, сейчас похоже ларчик и открывается жаль только не ясно как это обойти и почему так странно это проявляется. :( Сервлет:
В web.xml
Добавлено через 12 минут и 49 секунд P.S. Нет, кажется рано обрадовался, не работает и без сервлета - только по-другому - пишет, что не может action. (При вызове из сервлета находит без проблем!) Похоже единственное правильное решение - оставить всю эту мистику на свежую голову. |
||||
|
|||||
MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
так не пробовал?
index.html
и в web.xml
а этот экшен должен вернуть валидную jsp со всеми объявлениями тэг-либ -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
carper |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Через refresh не хочу, т.к., хотя и на недолгое время, появляется страничка перенаправления, что неприятно смотрится, особенно на медленных линиях. Кстати, дело оказалось вовсе не в моем "изобретении" перенаправления при помощи сервлета, как я было подумал. Убрал все навороты, вызываю action напрямую, но первоначально описанная проблема осталась. ![]() Самое удивительное это то, как взаимосвязаны тэги тип s:action и s:label (поставленный в любом месте, лишь бы ПОСЛЕ s:action), что мало того, что после s:action не вызывается не только s:label, но и что бы то ни было вообще - будем считать, что что-то происходит с контекстом/потоком response, но и перестает отрабатывать, ранее отлично работающий, сам s:action! Он-то почему? И, главное, у других-то мой пример работает?! Очевидно, что ошибка именно у меня, но где? |
||||||
|
|||||||
carper |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Похоже, что я попал на баг, описанный в https://issues.apache.org/struts/browse/WW-2551
Но почему тогда это работает у других? |
|||
|
||||
carper |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Большое спасибо всем участникам - разобрался, дело было в настройках фильтра (совершенно безобидных, на первый взгляд, именно они приводили к перехвату потока).
![]() |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Код в студию! С указанием проблемного места, что люди не попадались в такие сети
-------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
carper |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Проблема, как я уже писал, была связана вовсе не с сервлетом/перенаправлениями. Нашлась эта фигня только после того, как я всерьез задумался о том, кто из стандартных компонентов может свинячить с потоками. ![]() Просто для фильтра было указано (FORWARD понадобился таки для перенаправления из сервлета, остальное от лукавого)
Дело оказалось в <dispatcher>INCLUDE</dispatcher> Из косвенных признаков было понятно, что дело где-то в response stream, но ничто в документации по STRUTS не наталкивало на то, что нельзя делать <dispatcher>INCLUDE</dispatcher>, скорее, наоборот, я где-то видел именно этот полный джентельменский набор диспатчеров. Получается явная, крайне неприятная фича, документации - серьезный подводный камень нигде даже не упоминался. Да, смысл фильтра на include не очевиден, но также совершенно не очевидно, что это должно сбрасывать поток вывода, хотя бы потому, что не ясно зачем же грести очистку всего потока вввода/вывода, не принимая во внимание, откуда отработал сам фильтр? :( Да и способ каким это делается - по принципу так работает, а так нет, нельзя назвать очевидным ни в коей мере. Исходя из поисков в Интернет, похоже, что на эту проблему никто не попал, т.к. никто на прописывал никаких dispather, ну, в крайнем случае, только на Forward. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |