2013-04-17 4 views
5

Я переношу приложение стойки в Struts 2. Он был разработан Struts 1.2 четыре года назад.jsp: forward tag to forward to Struts 2 action

Мой вопрос:

В моем JSP, есть такое высказывание:

<jsp:forward page="/a.do" /> 

Он хорошо работает в Struts 1, но не работает в Struts 2, скажите мне HTTP 404 ошибка когда я обращался к этому JSP-файлу.

Однако, если у меня есть доступ к http://localhost:8080/shell/a.do, он работает хорошо.

Интересно, причина в том, что прямое действие не может быть захвачено фильтром Struts 2? (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)

Таким образом, форвард не может быть отправлен на действие Struts 2?

В моем приложении много форвардов, если форварды не могут работать в Struts 2, это единственное решение для использования перенаправления вместо пересылки?

На самом деле этот вопрос основан на моем анализе, исходная работа - это страница приветствия на сайте. Если я использую jsp:forward навстречу a.do, он не работает. И я последовал за советом Романа, используйте result вместо форварда. Итак, теперь вопрос заключается в том, как настроить действие по умолчанию для всего приложения?

Я пробовал <default-action-ref name="a"/>, но он работает только для неотображаемых действий, например http://localhost:8080/shell2/(some-unmapped-action).do, он переходит к действию по умолчанию. Но это не сработает, если я не укажу ".do".

Конечно, это можно сделать с помощью url-rewrite, но я не хочу использовать этот подход.

+0

Привет всем, я думаю, что этот вопрос может быть закрыт, потому что только тогда, когда Я добавил ' ЗАПРОС INCLUDE FORWARD' в моем web.xml для фильтра struts2, эта проблема может быть исправлена. FYI. –

ответ

1

Это 404, потому что нет действий, сопоставленных с /a.do в struts2 или struts1, если вы используете его одновременно. Теги jsp должны работать нормально, но лучше переместиться на struts tags всякий раз, когда это возможно. Концепция форварда от struts1 перешла к концепции dispatcher result. Вы должны удалить все форварды из своего приложения и создать результаты вместо этого.

+0

Большое спасибо за ваш ответ, Роман. –

+0

«Вам нужно удалить все форварды из приложения и создать результаты». Это отличный указатель! Однако моя реальная проблема связана с тем, что я набираю http: // localhost: 8080/shell2, я хочу перейти на домашнюю страницу, поэтому в моем файле welcom.jsp (настроен в файле web.xml, welcome-file-list), запрос может быть перенаправлен на действие struts 1. Но это не может быть сделано в struts 2. Что я хочу сделать, это просто перенаправление на home.do (действие struts 2). Является ли это возможным? Подходы, которые я пробовал, следующие: 1. , не удалось, это просто соответствует URL-адресу не существует; –

+0

2. это работает, но все URL-адреса не существуют, перейдут на домашнюю страницу, это не то, что я хочу видеть. Я хочу получить только действие по умолчанию HOME. Возможно ли это в struts 2: Спасибо большое! –

4

Включить библиотеку распорки тегов

<%@ taglib prefix="s" uri="/struts-tags" %> 

, и вы можете просто написать в ур страницы JSP в ForWord к некоторому действию

<s:action name="YourAction" namespace="/PackageNamespace" executeResult="true" /> 
+0

Почему мы не можем использовать простой html вместо struts2. есть ли какое-либо другое преимущество больше, чем упоминание непосредственно YourAction Sridhar