2010-06-03 3 views
5

양식 게시시 속성 (매개 변수 아님) 요청을 설정할 수있는 방법이 있습니까?양식 게시시 요청 속성 설정

해결하려는 문제는 다음과 같습니다. 몇 가지 드롭 다운 목록에서 일부 데이터를 표시하는 JSP 페이지가 있습니다. 양식이 게시되면 내 Controller 서블릿이 양식의 매개 변수 설정/지정에 따라이 요청을 처리하고 추가 세부 정보를 표시해야하는 JSP 페이지로 리디렉션합니다. 이제 같은 데이터를 얻기 위해 다시 계산하거나 다시 계산할 필요없이 같은/이전 데이터를 드롭 다운 목록에 표시하려고합니다.

그리고 JSP 페이지에서 양식의 드롭 다운 목록은 요청 속성을 통해 지정된 데이터로 채워집니다. 현재 폼이 POST되고 동일한 JSP 페이지로 리디렉션 된 후 필요한 요청 속성이 없기 때문에 드롭 다운 목록은 비어 있습니다.

웹 응용 프로그램의 경우에는 상당히 n00b이므로이 문제에 대한 간편한 해결 방법은 현재 나를 탈출시키는 것입니다.

서블릿에서 제어 흐름을 재구성하는 방법에 대한 제안은 열려 있습니다.

이 응용 프로그램에 대한 몇 가지 세부 정보 : Apache Tomcat 6.0에서 실행되는 표준 Servlet + JSP, JSTL.

감사합니다.

+0

쿼리 문자열 매개 변수를 의미합니까? – Affe

+0

아니요, 요청 범위 속성을 의미했습니다. 가능한 한 짧고 감미로운 쿼리 문자열을 유지하고 싶습니다. – ssahmed555

+0

JSP에서 양식 코드를 게시 할 수 있습니까? – Michael

답변

4

.. 같은 JSP 페이지로 리디렉션 ... 당신은 여기에 리디렉션을 발사하지 말아야

하지만 앞으로. 나는.

response.sendRedirect("page.jsp"); 

을 할 것이 아니라

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

모든 매개 변수와 속성을 포함하여 원래 요청이 살아 남아이 방법을 수행하지 않습니다. 리다이렉션은 고객에게 브랜드의 새로운 신청서 ( 요청)를 발령하여 초기 요청을 파기하도록 지시합니다. 당신은 EL에 ${param}에 의해 요청 매개 변수에 액세스 할 수 있습니다 당신이 요청에 액세스 할 수 있습니다 JSP에서

attributeKey는 다음과 같이 서블릿에 요청 범위의 객체를 설정하는 데 사용 한 속성 키입니다 ${attributeKey}와 같은 방법으로 속성 :

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

request.setAttribute("attributeKey", someObject); 

는 JSP에서 HTML 입력 값을 유지에 관해서는, 당신은 요청 매개 변수 값에 따라 <input> 요소의 value attribtue을 설정해야

템플릿 텍스트에 request.getParameter("foo")의 결과를 인쇄합니다. 이것은 그러나 XSS 위험이 더 나은 다음과 같이 JSTL의 fn:escapeXml()의 도움으로 사용자 제어 입력을 탈출하는 것입니다 :

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

드롭 다운에서 선택한 옵션을 보유 조금 다른 이야기입니다.기본적으로 질문에 <option> 요소의 selected 속성을 설정해야합니다. 여러분이 일반적으로하는 것처럼, JSTL의 <c:forEach> 태그를 사용하여 Map<String, String> 또는 List<JavaBean> 옵션 값을 표시한다고 가정하면 다음과 같이 해결할 수 있습니다 (${countries}Map<String, String>으로 가정합니다. 요청, 세션 또는 응용 프로그램 범위) : 현재 반복 옵션 키가 요청 매개 변수 맵에서 제출 한 같을 때

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

이것은 selected 속성을 인쇄합니다.

+0

나는'rd.forward (request, response)'를 이미하고 있음을 언급하는 것을 잊었다. 하지만 지금 당장 나를 혼란스럽게하는 것은 forward() 이후에 JSP의 드롭 다운 목록이 비어 있습니다. Netbeans의 HTTP 모니터에서 드롭 다운 목록을 채우는 데 사용 된 데이터가 포함 된 요청 속성이 전달 후에 더 이상 존재하지 않는다는 것을 알 수 있습니다.()가 완료됩니다. 나는 sth를 놓치고있다! – ssahmed555

+1

허, HTTP 모니터? 요청 매개 변수와 요청 속성을 혼동하지 않습니까? HTTP 요청/응답 헤더/본문에는 특성이 표시되지 않지만 서버의 메모리에만 표시됩니다. 요청 매개 변수는 HTTP 요청/응답 헤더/본문에 표시됩니다. 문제에 대한 자세한 내용을 제공해야합니다. 그럼에도 불구하고 내 대답의 남은 자들이 새로운 통찰력을 가져다주지 않습니까? – BalusC

+0

아니요, NB의 HTTP 모니터는 웹 응용 프로그램의 다양한 구성 요소 간의 HTTP 요청 및 응답 트래픽을 디버그 할 수 있으며 요청 매개 변수와 요청 속성 (사용 가능한 경우)을 모두 표시합니다. – ssahmed555