как реализовать глобальную страницу перенаправления в struts2

Мы используем Struts 2 в нашем веб-приложении. Уже определено множество сопоставлений действий, я хочу реализовать функцию, в которой любые URL-адреса, начинающиеся с /buy и не сопоставленные ни с одним из существующих сопоставлений действий, например. /buy/new или buy/old должны быть перенаправлены на действие buy/index. Например, если кто-то пытается перейти на /buy/bla1 или /buy/bla2 или buy/bla1/bla2/bla3, следует перейти на купить / индекс.


person Sameer Malhotra    schedule 22.05.2015    source источник


Ответы (2)


Определите следующее действие в вашем пакете /buy:

<action name="*">
    <result type="redirectAction">index</result>
</action>

В качестве альтернативы вы можете просто использовать:

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

Но тогда вы не получите никакого перенаправления. Вместо этого индексная страница будет отображаться под несуществующим адресом.

Вам также необходимо установить следующий параметр в ваших struts.properties:

struts.action.extension = action,,

Вы можете добавить к параметру другие расширения, но, насколько я знаю, для всех расширений нет подстановочных знаков. Пустая строка охватывает такие каталоги, как /buy/bla, но /buy/bla.x не будет охватывать и приведет к ошибке 404, если вы не добавите x в список расширения.

Если этого недостаточно, вам может быть лучше решить эту проблему, используя правила перенаправления на веб-сервере.

person Stefan Bartel    schedule 22.05.2015
comment
В Struts2 уже есть действие по умолчанию, и зачем настраивать это странное расширение, которое не позволяет Struts загружать статические страницы. - person Roman C; 22.05.2015
comment
Я полностью забыл о действии по умолчанию для struts, так как никогда им не пользовался. Я удалил ненужный шаг из ответа. Я также добавил возможное использование default-action-ref. - person Stefan Bartel; 22.05.2015
comment
Странное расширение происходит от работы. Наш клиент не хочет сообщать, какой фреймворк используется, поэтому нам пришлось использовать html в качестве расширения действия. Я изменил его на action, чтобы уменьшить путаницу. - person Stefan Bartel; 22.05.2015
comment
Если вы или ваш клиент X не хотите сообщать, какой фреймворк используется, лучше вообще не использовать фреймворк, а используемое расширение не указывает непосредственно на использование фреймворка, а дает расширение для отображение действий. OP вообще не использует никаких расширений, и вы должны хотя бы следовать за ним. - person Roman C; 22.05.2015

Вы можете использовать ссылку на действие по умолчанию и указать для нее путь успеха JSP.

Если получено какое-либо несопоставленное действие, оно вызовет данное действие и перенаправит его на страницу результатов JSP.

person user1495298    schedule 23.05.2015