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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Struts 2: Странные проблемы с маппингом 
V
    Опции темы
MaxPayneC
Дата 18.3.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В маппинге указано несколько экшнов, один прописан в качестве default-action-ref. При запросе в браузере некоторых экшнов, например ShowCard, почему-то выполняется метод execute() экшна MainPage.

struts.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
    <constant name="struts.multipart.maxSize" value="20971520"/>
    <package name="com.vc.museums" extends="struts-default">
        <interceptors>
            <interceptor name="emptyStrings" class="com.vc.museums.controller.EmptyStringsInterceptor" />

            <interceptor-stack name="museumsStack">
                <interceptor-ref name="emptyStrings" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>

            <interceptor-stack name="museumsAJAXValidated">
                <interceptor-ref name="emptyStrings" />
                <interceptor-ref name="jsonValidationWorkflowStack" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="museumsStack" />
        
        <default-action-ref name="MainPage"/>
        <!--Главная страница-->
        <action name="MainPage" class="com.vc.museums.controller.MainPage">
            <result>/index.jsp</result>
        </action>
        <action name="ShowLibrary" class="com.vc.museums.controller.library.ShowLibrary">
            <result>/ShowLibrary.jsp</result>
        </action>
        <action name="addBookToLibrary" class="com.vc.museums.controller.library.AddBookToLibrary">
            <result name="success">/library_add.jsp</result>
            <result name="input">/library_add.jsp</result>
            <result name="error">/library_add.jsp</result>
        </action>

        <action name="Login" class="com.vc.museums.controller.managment.Login">
            <result name="success" type="redirectAction">
                <param name="actionName">MainPage</param>
            </result>
            <result name="error" type="redirectAction">
                <param name="actionName">MainPage</param>
            </result>
        </action>
        <!--Основная страницы раздела "Сотрудники"-->
        <action name="ShowStaff" class="com.vc.museums.controller.staff.Staff">
            <result>/staff.jsp</result>
        </action>
        <!--Страница добаления нового сотрудника-->
        <action name="AddStaff" class="com.vc.museums.controller.staff.AddEmployee">
            <result>/staff_add.jsp</result>
        </action>

        <!--Экшн показа изображения-->
        <action name="ShowImage" class="com.vc.museums.controller.ShowImage">
            <result name="success">/EmptyJSP.jsp</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>

        <!--Гостевая книга-->
        <action name="ShowGuestbook" class="com.vc.museums.controller.guestbook.ShowGuestbook">
            <result name="success">/guestbook/ShowGuestbook.jsp</result>
        </action>
        <action name="NewGuestbookMessageForm">
            <result>/guestbook/NewMessageForm.jsp</result>
        </action>
        <action name="CreateGuestbookMessage" class="com.vc.museums.controller.guestbook.CreateGuestbookMessage">
            <interceptor-ref name="museumsAJAXValidated" />
            <result name="success" type="redirectAction">
                <param name="actionName">ShowGuestbook</param>
            </result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
        <action name="DeleteGuestbookMessage" class="com.vc.museums.controller.guestbook.DeleteGuestbookMessage">
            <result name="success" type="redirect">${referer}</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>

        <!--Новости-->
        <action name="ShowNews" class="com.vc.museums.controller.news.ShowNews">
            <result name="success">/news/ShowNews.jsp</result>
        </action>
        <action name="ShowPieceOfNews" class="com.vc.museums.controller.news.ShowPieceOfNews">
            <result name="success">/news/ShowPieceOfNews.jsp</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
        <action name="CreatePieceOfNewsForm" class="com.vc.museums.controller.news.CreatePieceOfNewsForm">
            <result name="success">/news/CreatePieceOfNewsForm.jsp</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
        <action name="CreatePieceOfNews" class="com.vc.museums.controller.news.CreatePieceOfNews">
            <interceptor-ref name="museumsAJAXValidated" />
            <result name="success" type="redirect">${referer}</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
        <action name="DeletePieceOfNews" class="com.vc.museums.controller.news.DeletePieceOfNews">
            <result name="success" type="redirectAction">
                <param name="actionName">ShowNews</param>
            </result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
        <action name="UpdatePieceOfNewsForm" class="com.vc.museums.controller.news.UpdatePieceOfNewsForm">
            <result name="success">/news/UpdatePieceOfNewsForm.jsp</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
        <action name="UpdatePieceOfNews" class="com.vc.museums.controller.news.UpdatePieceOfNews">
            <interceptor-ref name="museumsAJAXValidated" />
            <result name="success" type="redirect">${referer}</result>
            <result name="error">/news/UpdatePieceOfNewsForm.jsp</result>
            <result name="input">/news/UpdatePieceOfNewsForm.jsp</result>
        </action>

        <!--Карточки-->
        <action name="ShowCard" class="com.vc.museums.controller.expositions.cards.ShowCard">
            <result name="success">/expositions/cards/ShowCard.jsp</result>
            <result name="error">/Error.jsp</result>
            <result name="input">/Error.jsp</result>
        </action>
    </package>
</struts>

Никакой закономерности в том, для каких именно экшнов появляется такая проблема, заметить не удалось. Никто не сталкивался? В чем может быть дело? Еще проблема иногда проявлялась для экшна ShowLibrary.
PM   Вверх
carper
Дата 18.3.2010, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Попробуйте убрать default-action-ref name="MainPage" и посмотреть как ругнется ShowCard, скорее всего тут что-то попутано с интерсептором или форвародом.

Короче, совет простой - отсекайте все лишнее, не похоже, что ошибка в мэппинге, больше на ошибку в коде.
А при КАЖУЩИМСЯ отсутствием закономерностей я лично первым делом смотрю на операции ветвления и обработки граничных условий (ну в С++ и Delphi еще очень помогал проход по местам боевой славы типа выделения памяти и работы с указателями) + очень помогает включение логирования, сразу понятно, где ориентировочно происходят чудесные явления.
PM MAIL   Вверх
MaxPayneC
Дата 18.3.2010, 10:49 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Выявлена первая закономерность: комментируем дефолт-экшн-реф, запускаем, работает нормально. Останавливаем, запускаем, не работает. Раскомментируем, запускаем, не работает. Останавливаем, комментируем, работает.
PM   Вверх
carper
Дата 18.3.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(MaxPayneC @  18.3.2010,  10:49 Найти цитируемый пост)
не работает


"Не работает" в смысле отрабатывает не тот action?
Если так, то что показывает лог?
В каком месте происходит этот вызов?

Что происходит если оставить только defaultStack?

Попробуйте создать страничку с одной кнопкой для вызова ShowCard - проблема остается?
Остается всегда, даже если вместо ShowCard подсунуть класс-пустышку и написать
 <result>/fakeEmpty.html</result> ?

Кстати, какой контейнер используется? 
Версия STRUTS?
PM MAIL   Вверх
MaxPayneC
Дата 18.3.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Версия стратс 2.1.8.1.
Интерсепторы сносить пробовал, я пробовал сносить все, кроме собственно проверяемого экшна.
Исправил структуру проекта на дефолтную мавеновскую, проблема вроде исчезла. Вероятно, беда была в том, что при перед стартом томката из ИДЕ в папке с билдом артефакта не обновлялся struts.xml. Если проблема больше не появится, помечу тред как решенный..
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0787 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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