2013-04-17 13 views
5

Przenoszę aplikację Struts do Struts 2. Został on opracowany przez Struts 1.2 cztery lata temu.jsp: forward forward do akcji Struts 2

Moje pytanie brzmi:

W moim JSP, jest takie stwierdzenie:

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

To działa dobrze w Struts 1, ale nie działa w Struts 2, to powiedz mi HTTP 404 błąd kiedy uzyskiwałem dostęp do tego pliku JSP. Jeśli mam dostęp do http://localhost:8080/shell/a.do, to działa dobrze.

Zastanawiam się, dlaczego tak się dzieje, ponieważ akcja naprzód nie może zostać przechwycona przez filtr Struts 2? (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)

A zatem nie można przesłać dalej do akcji Struts 2?

W moim zgłoszeniu znajduje się wiele przekierowań, jeśli operatory nie mogą działać w Struts 2, czy jedynym rozwiązaniem jest użycie przekierowania zamiast przekierowania?

Właściwie to pytanie jest oparte na mojej analizie, oryginalna praca to strona powitalna witryny. Jeśli użyję jsp:forward do przodu do a.do, to nie działa. I poszedłem za radą Romana, użyłem result zamiast do przodu. Tak więc teraz pytanie brzmi, jak skonfigurować domyślną akcję dla całej aplikacji?

Próbowałem <default-action-ref name="a"/>, ale działa tylko dla niezmapowanych działań, na przykład http://localhost:8080/shell2/(some-unmapped-action).do, przechodzi do domyślnej akcji. Ale to nie działa, jeśli nie podam wartości ".do".

Oczywiście można to zrobić za pomocą przepisywania adresu URL, ale nie chcę używać tego podejścia.

+0

Witam wszystkich, myślę, że to pytanie może być zamknięta, ponieważ tylko wtedy, gdy Dodałem ' INCLUDE FORWARD' w moim web.xml dla filtra struts2, ten problem można naprawić. FYI. –

Odpowiedz

1

To 404, ponieważ nie ma akcji zmapowanej z /a.do w struts2 ani struts1, jeśli używasz go jednocześnie. Znaczniki jsp powinny działać dobrze, ale lepiej przejść do struts tags ilekroć jest to możliwe. Koncepcja forward z struts1 przeniesiona do koncepcji dispatcher result. Musisz usunąć wszystkie przekazy z aplikacji i zamiast tego utworzyć wyniki.

+0

Wielkie dzięki za odpowiedź, Roman. –

+0

"Musisz usunąć wszystkie przekazy z aplikacji i zamiast tego utworzyć wyniki." To świetny wskaźnik! Jednak moim prawdziwym problemem jest wpisanie http: // localhost: 8080/shell2, mam zamiar przejść do strony głównej, więc w moim pliku welcom.jsp (skonfigurowanym w web.xml, welcome-file-list), żądanie może zostać przekazane do akcji rozpórki 1. Ale nie można tego zrobić w podpórkach 2. Chcę tylko przekazać dalej do home.do (działanie "podpórki 2"). Czy to możliwe? Podejścia Próbowałem jak następuje: 1. , nie powiodło się, to po prostu pasuje do adresu URL nie istnieje; –

+0

2. to działa, ale wszystkie adresy URL nie istnieją przejdą na stronę główną, to nie jest to, co chcę zobaczyć. Chcę uzyskać tylko domyślną akcję HOME. 2? Dziękuję bardzo znowu! –

4

Dołącz bibliotekę znaczników rozpórki

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

i u można po prostu napisać w ur strony JSP do forword do jakiegoś działania

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

Dlaczego nie możemy użyć zwykłego html zamiast struts2. czy jest jakaś inna awangarda bardziej niż wspomnienie jako bezpośrednio YourAction Sridhar