2014-12-12 2 views
2

내가 찾은 많은 해결책 중에서, 나는 그들 중 누구도 나를 위해 일할 수없는 것처럼 보입니다. 내 JSP 파일의 드롭 다운 목록을 가지고 :양식 제출 후 드롭 다운 상자에서 선택된 값을 유지하는 방법은 무엇입니까?

<select name="chosenOne" onchange="javascript:getUsers(this.value);"> 
      <option value="0" onclick="javascript:getUsers(this.value);">All Modules</option> 
      <c:forEach items="${modules}" var="module"> 
       <option value="${module.id}"><c:out value="${module.title}"/></option> 
      </c:forEach> 
     </select></p> 

그것은 "모든 모듈"옵션을 제외하고, 내 데이터베이스에서 동적으로 채 웁니다.

 <script type="text/javascript"> 
     function getUsers(id) { 
      if (id != "0"){ 
      document.updateForm.id.value = id; 
      } 
      else{ 
      document.updateForm.id.value = "0"; 
      } 
      document.updateForm.submit(); 
     }</script> 

그리고 여기에 다른 것들 사이에 드롭 다운 상자를 다루는 내 서블릿 코드입니다 : 여기 내 자바 스크립트 함수는 onchange를 이벤트의

 protected void process(final HttpServletRequest request, final HttpServletResponse response) 
     throws ServletException, IOException { 

    long modID = 0; 
    String url = "jsp/user/administration.jsp"; 
    request.setAttribute("modules", dataAccessor.getAllModules()); 

    if (isParameterValid(request.getParameter("id"))) { 
     modID = Long.parseLong(request.getParameter("id")); 
     request.setAttribute("users", getUsersFromModule(modID)); 
     System.out.println(modID); 

    } else if (!isParameterValid(request.getParameter("id"))) { 
     request.setAttribute("users", dataAccessor.getAllUsers()); 

    } else { 
     request.setAttribute("errorMessage", "There was a problem retrieving users!"); 
     url = "jsp/error.jsp"; 
    } 

    //request.setAttribute("formerSelect", modID); 
    request.getRequestDispatcher(url).forward(request, response); 
} 

그래서 내가 할 수있는 방법을 선택한 드롭 다운 값에 남아 양식을 새로 고친 후 드롭 다운 상자가 나타 납니까? 이전에 선택한 항목의 값만 드롭 다운에 포함하는 "formerSelect"속성을 설정하는 방법을 살펴 보았습니다. 그런데 어떤 이유로 내 드롭 다운을 내 옵션 태그 내의 "selected"값에 할당하려 할 때 쓸모가 없었습니다. 어떤 도움이라도 대단히 감사합니다.

request.setAttribute("selectedModule", request.getParameter("chosenOne")); 

을 선택한으로 그 후 당신은 옵션을 표시해야합니다 :

답변

2

당신은 제출 후 HttpRequest에이 매개 변수를 전달해야

<c:forEach items="${modules}" var="module"> 
    <option value="${module.id}" ${module.id == selectedModule ? 'selected':''}>...</option> 
</c:forEach> 
+0

이 작동하지 않습니다. 폼을 새로 고친 후에도 여전히 "모든 모듈"로 돌아갑니다. –

+2

작동해야합니다. 간단한 예제를 만들었습니다. https://www.dropbox.com/s/o6d2xeidz2xyhbr/select_pass_param.zip?dl=0 –

+0

코드를 잘못된 위치에 배치해야합니다. request.setAttribute ... 내 서블릿 클래스 내에서 이동합니까? "$ {module.id == selectedModule? 'selected': ''}"<---- 이것은 내게 부두 같아 보입니다. 이것이 무엇을하는지 설명해 주시겠습니까? 감사합니다. –

0

I는 다음과 같이 설명 할 수있다. 예제 코드 는 JSP 파일에이 코드를 넣어 당신의 서블릿

String status = request.getParameter("status"); 
request.setAttribute("status", status); 

에이 코드를 넣어

<select id="status" name="status" class="listBx" onChange = "check(this);"> 
          <option value="" >--- Select ---</option>       
          <option value="1" <%if((request.getAttribute("status") != null) && request.getAttribute("status").equals("1")){ %> selected <%} %>>Logged in</option> 
          <option value="0" <%if((request.getAttribute("status") != null) && request.getAttribute("status").equals("0")){ %> selected <%} %>>Logged Out</option> 
         </select> 
관련 문제