Проблемы с подхватом рута с перехватчиком в стойках2 - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть перехватчик, который проверяет, вошел ли пользователь в систему, прежде чем выполнять запрошенное действие. Я попытался установить это как значение по умолчанию для всех действий. Для всех адресов, кроме одного, это работает как брелок. Когда я захожу на мой корневой URL "http://localhost:8080/map/", по какой-то причине перехватчик не срабатывает. Я предполагаю, что чего-то не хватает, я Struts.xml, но я не могу понять, что:

<struts>

    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources,DatabaseResources" />

    <package name="map" extends="struts-default">
        <interceptors>
            <interceptor name="loginintercept"
                class="se.contribe.intercept.LoginInterceptor" />
            <interceptor-stack name="defaultLoginStack">
                <interceptor-ref name="loginintercept" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="defaultLoginStack" />

        <default-action-ref name="index"></default-action-ref>

        <global-results>
            <result name="loginneeded">/login.jsp</result>
        </global-results>

        <action name="index" class="**.map.MapAction">
            <result>/index.jsp</result>
        </action>

        <action name="login">
            <result>/login.jsp</result>
        </action>

        <action name="loginInput" class="**.session.LoginAction">
            <result type="redirectAction">
                <param name="actionName">index</param>
            </result>
            <result name="input">/login.jsp</result>
            <result name="error">/login.jsp</result>
        </action>

        <action name="*" class="**.map.MapAction">
            <result>/index.jsp</result>
        </action>
    </package>

</struts>

Я немного запутал имена классов на случай, если мой работодатель возразит.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Мне удалось со временем разобраться в этом.
Я тестировал запись простого вывода в консоль на этапе выполнения

<action name="index" class="**.map.MapAction">  

Когда я открывал веб-страницу, в консоли не было напечатано ничего. Это заставило меня задуматься. Моя главная страница называлась index.jsp, и, очевидно, это имя обходит обычные элементы управления Struts. Изменение имени на index2.jsp решило проблему.
Возможно, есть еще место, где я мог бы изменить это поведение, но было проще просто изменить имя.

0 голосов
/ 21 апреля 2011

Ваш корневой URL-адрес может быть http://localhost:8080/map/, но пакет "map" относится к http://localhost:8080/map/map

Возможно, вам нужен пакет, определенный для "/", который является корневымна http://localhost:8080/map/, и вы можете захотеть пакет, определенный для "", который позволяет выполнять действия внутри любого пакета.

Редактировать : В приведенном выше я запутал имя для пространства имен (кажется, я слишком много использовал плагин конвенций)

Я бы сильно подозревал, что если вы проверитеВ вашем файле web.xml вы найдете что-то вроде:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

, который, если вы измените его на

<welcome-file-list>
    <welcome-file>index.action</welcome-file>
</welcome-file-list>

, вы получите то, что ожидали, так как у меня могут быть оба индекса.jsp и index.action и изменяя этот параметр, выберите один или другой.

...