2013-08-12 6 views
1

나는 내 첫 번째 드롭 다운 목록 id = "bfnsCode"을 가지고 있습니다. 다음 번 드롭 다운 목록에서 그 값을 사용하고 싶습니다. id = "taxtCode"는 새로운 세트를 보여줄 수 있습니다. 첫 번째 드롭 다운을 기준으로 한 값입니다. 당신이 볼 수 있듯이, 나는 드롭 다운 세금에 request.getParameter ("bfnsCode")를 사용하여 값을 호출하지만 나에게 null 값을 제공첫 번째 드롭 다운 목록에서 값을 얻으십시오

<div class="BIR" style="display: none;"> 
      <div> 
      <label style="font-size: 17px;">BIR-Form Number</label><br>   
       <select name="bfnsCode" id="bfnsCode" class="sel" style="width: 245px; margin-left: 0;"> 
        <option selected="selected" value=""></option> 
        <% 
         TblBIRFormNoDAO birdao = DAOFactory.getDaoManager(TblBIRFormNo.class); 

         HttpSession live = request.getSession(true); 
         TblUserInformation user = (TblUserInformation) live.getAttribute("user"); 

         List<TblBIRFormNo> birtypelist = null;      

         if(user.getRcoCode() != null){ 
          birtypelist =birdao.getAllBirFormNumber(); 
         }else{ 

         } 

         String birtypeoptions = ""; 

         if(birtypelist!=null) { 
          if(birtypelist.size()>0) { 
          for(int i=0; i<birtypelist.size();i++) { 
          TblBIRFormNo taxtype = (TblBIRFormNo) birtypelist.get(i); 
          birtypeoptions += "<option value='"+taxtype.getBfnsCode()+"'>"+taxtype.getBfnsCode()+"</option>";          
          taxtype = null; 
           } 
          } 
         } 

         birdao = null; 
         birtypelist = null; 
         %> 
         <%=birtypeoptions%> 

       </select> 
      <br><br> 
      <label style="font-size: 17px;">Tax Type</label><br>    
       <select name="taxtCode" id="taxtCode" class="sel" style="margin-left: 0;"> 
        <option selected="selected" value=""></option> 
        <% 
         TblTaxTypeDAO taxdao = DAOFactory.getDaoManager(TblTaxType.class); 

         List<TblTaxType> taxtypelist = null; 

         String tax = request.getParameter("bfnsCode"); 
         Debugger.print("test : "+tax); 

         if(tax != null){ 
          taxtypelist = taxdao.findAlltaxtCode(tax); 
         }else{ 
          taxtypelist = taxdao.getAllTaxTypes(); 
         } 

         String taxtypeoptions = ""; 

         if(taxtypelist!=null) { 
          if(taxtypelist.size()>0) { 
          for(int i=0; i<taxtypelist.size();i++) { 
          TblTaxType taxtype = (TblTaxType) taxtypelist.get(i); 
          taxtypeoptions += "<option value='"+taxtype.getTaxtCode()+"'>"+taxtype.getTaxtCode()+"</option>";          
          taxtype = null; 
           } 
          } 
         } 

         taxdao = null; 
         taxtypelist = null; 
         %> 
         <%=taxtypeoptions%>   

       </select> 

: 여기 내 코드입니다.

ListBIRFormNo.java (C에 대한 서블릿 : 대해 forEach)

public class ListBIRFormNo extends HttpServlet { 
private static final long serialVersionUID = 1L; 

private List<TblBIRFormNo> birtypelist; 

public List<TblBIRFormNo> getTblBIRFormNo() { 
    return birtypelist; 
} 
public void setTblBIRFormNo(List<TblBIRFormNo> birtypelist) { 
    this.birtypelist = birtypelist; 
} 
private HttpServletRequest request; 

public void setServletRequest(HttpServletRequest request){ 
    this.request = request; 
} 

public String execute(){ 
    Debugger.border(); 
    try{ 
     TblBIRFormNoDAO birdao = DAOFactory.getDaoManager(TblBIRFormNo.class); 

     HttpSession live = request.getSession(true); 
     TblUserInformation user = (TblUserInformation) live.getAttribute("user"); 

     if(user.getRcoCode() != null){ 
      birtypelist =birdao.getAllBirFormNumber();   
     }else{ 
      //no-op 
     } 

     //expose 'birtypelist' as an attribute 
     request.setAttribute("birtypelist", birtypelist); 

    }catch(Exception e){ 
     e.printStackTrace(); 
     Debugger.print(" EXCEPTION :"+e.getStackTrace()); 
     Debugger.endDebug(this.getClass().toString()); 
     Debugger.border(); 
    } 
    Debugger.border(); 
    return null; 
} 

}

+0

서블릿을 사용하고 요청 속성에 매개 변수를 저장하여 다음보기 JSP에서 렌더링하십시오. –

+0

단일 양식만으로도 가능합니까? 이들은 양식 안에있는 div들뿐입니다. – RMsplace

답변

1

나는 당신이 요청 처리 생명주기를 오해 할 수있다 생각합니다. request.getParameter("bfnsCode")이 null이 아닌 값을 갖는 유일한 방법은 bfnsCode 매개 변수가 현재 요청과 함께 전송 된 경우입니다. 모든 코드가 단일 요청의 컨텍스트 내에서 실행되기 때문에 여기에있는 경우가 아닙니다 (말할 수있는 한). 그래서 예, bfnsCode 당신이 그것을 확인시 null이됩니다.

하나의 선택 상자가 동일한 페이지 내의 다른 상자에 응답하게하려면 일반적으로 JavaScript로 수행하는 것이 가장 좋습니다. 첫 번째 <select> 상자에 onchange 또는 onkeyup (또는 둘 다) 이벤트 처리기가 필요하며 첫 번째 상자에서 값을 가져 와서 두 번째 상자를 업데이트하는 데 사용하도록 구현하고 싶습니다. 관련 데이터를로드하거나 페이지에서 설정 한 일부 캐시에서 정확한 데이터 세트를로드하여 AJAX 호출을 작성합니다. 이것은 실제로보다 복잡해 보입니다 (특히 jQuery와 같은 JavaScript 프레임 워크를 사용하는 경우). 그러나 현재 접근 방식 에서처럼 서버 측 코드를 사용하여 문제를 해결할 수는 없습니다.

Java 코드를 JSP 페이지에 직접 포함시키지 않도록 구현을 리팩터링하십시오. 사용자 체크와 관련된 비즈니스 로직을 Servlet 구현체 (또는 Struts가 제공하는 서블릿과 유사한 구조체라고 생각하면 Action)로 이동 한 다음 <c:forEach> 태그를 사용하여 추가 할 수 있습니다 옵션 인 <select> 요소 (즉, Sotirios가 그의 의견에서 말한 바).

if(user.getRcoCode() != null){ 
    birtypelist =birdao.getAllBirFormNumber(); 
}else{ 
    //no-op 
} 

//expose 'birtypelist' as an attribute 
request.setAttribute("birtypelist", birtypelist); 

... 다음 JSP 페이지에서 사용할 수 있습니다 :

는 예를 들어, Servlet/Action 코드에서 당신이 할 다음 현재로 최대 birtypelist 설정하고, 수

<select name="bfnsCode" id="bfnsCode" class="sel" style="width: 245px; margin-left: 0;"> 
    <option selected="selected" value=""></option> 
    <c:forEach var="taxtype" items="${birtypelist}"> 
     <option value="${taxType.bfnsCode}">${taxType.bfnsCode}</option> 
    </c:forEach> 
</select> 

현재 프로그래밍 방식과 비슷한 결과를 얻을 수 있습니다.

+0

그래, 내가이 일을해야한다는 것을 알았어, 아마 더 쉬운 방법이 있기를 바랄 뿐이야. 내가해야 할 일을 알려줘서 고마워. – RMsplace

+0

다음은 필요한 스크립팅 예제입니다. http://jsfiddle.net/3makm/ – aroth

+0

그래,이게 내가 원하는데 내 목록은 내 데이터베이스를 기반으로하고있어, 나는 정적 인 방식으로 할 수 없다. – RMsplace

관련 문제