2010-06-03 8 views
5

Czy istnieje jakiś sposób ustawienia atrybutów żądania (bez parametrów) podczas publikowania formularza?Ustawianie atrybutów żądania, gdy formularz jest POSTed

Problem, który próbuję rozwiązać, to: Mam stronę JSP wyświetlającą niektóre dane na kilku listach rozwijanych. Kiedy formularz zostanie opublikowany, mój serwlet kontrolera przetwarza to żądanie (na podstawie parametrów ustawionych/określonych w formularzu) i przekierowuje na tę samą stronę JSP, która ma wyświetlać szczegóły dodawania. Chcę teraz wyświetlać te same/wcześniejsze dane na listach rozwijanych bez konieczności ponownego obliczania lub ponownego obliczania w celu uzyskania tych samych danych.

Na wspomnianej stronie JSP listy rozwijane w formularzu są wypełniane danymi określonymi w atrybutach żądania. W tej chwili, po tym, jak formularz jest POSTed i jestem przekierowywany na tę samą stronę JSP, listy rozwijane są puste, ponieważ nie ma wymaganych atrybutów żądania.

Jestem całkiem n00b, jeśli chodzi o aplikacje internetowe, więc oczywiste rozwiązanie tego problemu ucieka mi w tej chwili!

Jestem otwarty na sugestie dotyczące sposobu restrukturyzacji przepływu sterowania w Servlet.

Kilka szczegółów na temat tej aplikacji: standardowy serwlet + JSP, JSTL, uruchomiony w Apache Tomcat 6.0.

Dzięki.

+0

Masz na myśli parametry ciągu zapytania? – Affe

+0

Nie, miałem na myśli atrybuty o zasięgu żądania. Chcę, aby ciąg zapytania był jak najkrótszy i najsłodszy. – ssahmed555

+0

Czy możesz umieścić kod formularza na stronie JSP? – Michael

Odpowiedz

4

.. i przekierowuje do tej samej strony JSP ..

Nie należy wystrzelić przekierowanie tutaj, ale naprzód. To znaczy. nie rób

response.sendRedirect("page.jsp"); 

ale raczej zrobić

request.getRequestDispatcher("page.jsp").forward(request, response); 

ten sposób oryginalny wniosek pozostaje przy życiu, łącznie ze wszystkimi parametrami i atrybutami. Przekierowanie oznacza, że ​​klient musi wystrzelić nowe, nowe,, tym samym garbując początkowe żądanie.

W JSP można uzyskać dostęp do parametrów żądania przez ${param} w EL i można uzyskać dostęp do żądania przypisuje ten sam sposób ${attributeKey} gdzie attributeKey jest kluczem atrybutu, który już używany do ustawiania obiektu w zakresie żądania w serwletu następująco :

request.setAttribute("attributeKey", someObject); 

chodzi o zachowaniu wartości wejściowe HTML w JSP, po prostu trzeba ustawić <input> elementu value attribtue odpowiednio z wartości parametru żądania:

<input name="foo" value="${param.foo}"> 

Powoduje wydrukowanie wyniku request.getParameter("foo") w tekście szablonu. Ma to jednak ryzyko XSS, lepiej jest uciec wprowadzania danych przez użytkownika sterowany z pomocą JSTL za fn:escapeXml() następująco:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
... 
<input name="foo" value="${fn:escapeXml(param.foo)}"> 

ustalający wybraną opcję w menu rozwijanym jest nieco inna historia.Zasadniczo musisz ustawić atrybut selected danego elementu <option>. Zakładając, że jesteś - jak zwykle - za pomocą znacznika JSTL <c:forEach>, aby wyświetlić wartości opcji opcji Map<String, String> lub może List<JavaBean>, możesz rozwiązać je w następujący sposób (zakładając, że ${countries} to Map<String, String>, które umieściłeś jako atrybut w żądanie, sesji lub zakres aplikacji):

<select name="country"> 
    <c:forEach items="${countries}" var="country"> 
     <option value="${country.key}" ${country.key == param.country ? 'selected' : ''}>${country.value}</option> 
    </c:forEach> 
</select> 

drukuje atrybut selected gdy obecnie powtórzyć klucz opcja jest równa zgłoszonym na mapie żądanie parametru.

+0

Zapomniałem wspomnieć, że już robię 'rd.forward (żądanie, odpowiedź)'. Ale co mnie teraz dziwi to, że po forward() listy rozwijane JSP są puste - i widzę w monitorze HTTP Netbeans, że atrybuty żądania, które zawierały dane używane do zapełnienia list rozwijanych, nie są już obecne po() kończy. Brakuje mi czegoś! – ssahmed555

+1

Huh, monitor HTTP? Czy nie mylisz atrybutów żądania z parametrami żądania? Atrybuty nie są widoczne w nagłówku/treści żądania/odpowiedzi HTTP, ale tylko w pamięci serwera. Parametry żądania są widoczne w nagłówku/treści żądania/odpowiedzi HTTP. Naprawdę będziesz musiał podać więcej szczegółów na temat problemu. Niezależnie od tego, czy reszta mojej odpowiedzi nie przyniosła nowych wglądów? – BalusC

+0

Nie, ale monitor HTTP NB jest w stanie debugować ruch żądania i odpowiedzi HTTP między różnymi komponentami w aplikacji internetowej i wyświetla zarówno parametry żądania, jak i atrybuty żądania - jeśli są dostępne. – ssahmed555