2008-10-23 12 views

Odpowiedz

23

Nie. Niestety obiekt Żądaj jest dostępny tylko do momentu zakończenia ładowania strony - po jej zakończeniu utracisz wszystkie zawarte w nim wartości, o ile nie zostały one gdzieś zapisane.

Jeśli chcesz utrzymywać atrybutów poprzez wniosków trzeba albo:

  1. Posiada ukrytą wejście w swojej formie, jak <input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />. Będzie to wówczas dostępne w serwecie jako parametr żądania.
  2. Umieścić go w sesji (patrz request.getSession() - w JSP ten jest dostępny jako po prostu session)

Polecam przy użyciu sesji, gdyż łatwiej jest zarządzać.

+0

Może to nie jest niefortunne. Skrypty JSP to zła praktyka. Zachowaj ostrożność podczas korzystania z sesji, łatwiej jest nią zarządzać, ale czasami jest ona "droga" pod względem skalowalności. –

+2

cóż, ułóż to w ten sposób - sesja jest prawdopodobnie lepsza niż cokolwiek, co sam napiszesz :) Jeśli jesteś na przyzwoitym serwerze aplikacji, możesz wykonać replikację itd. I masz opcje do przechowywania (nie tylko w pamięci). –

1

Popraw mnie jeśli źle ... Myślę prośba nie utrzymują między kolejnymi stronami ..

Pomyśl przechodzić od strony 1 -> strona 2 -> strona 3.

Masz jakąś wartość ustawić w obiekcie żądania przy użyciu metody setAttribute ze strony 1, którą pobieramy na stronie 2 za pomocą metody getAttribute, a następnie, jeśli spróbujemy ponownie ustawić coś w tym samym obiekcie żądania, aby pobrać go na stronie 3, wówczas nie powiedzie się podanie wartości pustej jako "żądanie, które utworzyło strona JSP, a żądanie generowane podczas przesyłania strony JSP to zupełnie inne żądania, a atrybuty umieszczone na pierwszej nie będą dostępne w drugim ".

mam na myśli coś takiego na stronie 2 zawiedzie:

Gdzie tak samo pracował w przypadku strony 1, takich jak:

Więc myślę, że muszę kontynuować albo dwóch opcji sugerowanych przez Phill.

4

Odpowiedź Phila Sacre'a była poprawna, jednak sesja nie powinna być używana tylko dla piekła. Powinieneś używać tego tylko dla wartości, które naprawdę muszą być spełnione przez cały czas trwania sesji, takich jak login użytkownika. Często zdarza się, że użytkownicy nadużywają sesji i napotykają więcej problemów, zwłaszcza gdy zajmują się kolekcją lub gdy użytkownicy powracają na stronę, którą odwiedzili wcześniej, aby znaleźć wartości, które pozostały z poprzedniej wizyty. Inteligentny program minimalizuje zakres zmiennych tak bardzo, jak to możliwe, zły używa zbyt wiele sesji.

0

Myślę, że phil to właściwa opcja żądania jest dostępna do momentu wczytania strony. więc jeśli chcemy przesłać wartość do innej strony, chcemy ustawić ją w ukrytym tagu lub w sesji po stronie, jeśli tylko potrzebujesz wartości tylko na innej stronie i nie więcej niż to, wtedy ukryte tagi są najlepszą opcją, jeśli potrzebujesz tej wartości na więcej niż jednej stronie w tym czasie sesja jest lepszą opcją niż ukryte tagi.

2

Spróbuj

request.getSession().setAttribute("SUBFAMILY", subFam); 
request.getSession().getAttribute("SUBFAMILY"); 
4

Jeśli chcesz, aby wnioski o dopuszczenie do nadal występuje spróbuj tego:

przykład: na JSP lub serwletu stronie

request.getSession().setAttribute("SUBFAMILY", subFam); 

i na dowolnej stronie odbiorczej skorzystać z poniższych linii aby odzyskać sesję i dane:

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY"); 
3

Można to zrobić za pomocą atrybutów pageContext, choć:

W JSP:

<form action="Enter.do"> 
    <button type="SUBMIT" id="btnSubmit" name="btnSubmit">SUBMIT</button> 
</form> 
<% String s="opportunity"; 
pageContext.setAttribute("opp", s, PageContext.APPLICATION_SCOPE); %> 

W Servlet (związany z "Enter.do" url-pattern):

String s=(String) request.getServletContext().getAttribute("opp"); 

Istnieją inne zakresy oprócz APPLICATION_SCOPE, takie jak SESSION_SCOPE. APPLICATION_SCOPE jest używany dla atrybutów ServletContext.

Powiązane problemy