2016-08-24 8 views
0

私はAjaxなしでSpring MVC Webアプリケーションを実装しようとしています。Spring MVC Webアプリケーションでリクエスト間にフォームSELECT要素を保持する方法は?

現在、一連のカスケードドロップダウンがあるフォームがあります。後続の選択(ドロップダウン)要素の変更について、前に選択したドロップダウンの項目リストを保持する方法と、後続のドロップダウン要素の項目リストを同時にクリアし、ドロップダウン要素の値をnullまたはデフォルトにリセットする。現在私はデータベースからフェッチされたリスト項目をModelAndViewオブジェクトに入れています。このようにすると、ドロップダウンアイテムは次のリクエストで保持されません。このようなカスケードドロップダウンリスト項目をHttpSessionオブジェクトに入れるのは良い習慣ですか? Spring MVCでこのようなページフローを効率的に処理するには、どうすればよいでしょうか?&続き

は、コントローラの要求ハンドラメソッドである: -

@RequestMapping(value="/add.do",method=RequestMethod.GET,params="actionMethod=beginAddBldg") 
    public ModelAndView beginAddBuilding(@ModelAttribute("addBuildingFormBean") Building building) { 
     ModelAndView mv = new ModelAndView("addBldg"); 
     List<Division> lstOfDivisions=buildingService.getDivisions(); 
     mv.addObject("divisionList", lstOfDivisions); 
     return mv; 
    } 

そして、次のJSPページのコードです: - あなたがそれらを置くことができ

<form:form name="addBuildingForm" modelAttribute="addBuildingFormBean" method="POST"> 
     <form:hidden path="actionMethod"/> 
     <form:hidden path="actionForward"/> 
     <table border="1" style="border-collapse:collapse;"> 
      <tr> 
       <th> 
        <form:label path="divisionID"> 
         Division 
        </form:label> 
       </th> 
       <td> 
        <form:select path="divisionID" id="divisionID" onchange="getNextListItems(document.addBuildingForm,'getSubdivs','addBldg','/buildings/add.do');"> 
         <form:option value="-1">--Select--</form:option> 
         <form:options items="${divisionList}" itemLabel="divisionName" itemValue="divisionID"/> 
        </form:select> 
       </td> 
       <th> 
        <form:label path="subdivisionID"> 
         Subdivision 
        </form:label> 
       </th> 
       <td> 
        <form:select path="subdivisionID" id="subdivisionID" onchange="getNextListItems(document.addBuildingForm,'getDistrictsList','addBldg','/add.do');"> 
         <form:option value="-1">--Select--</form:option> 
        </form:select> 
       </td> 
      </tr> 
      <tr> 
       <th> 
        <form:label path="districtID"> 
         District 
        </form:label> 
       </th> 
       <td> 
        <form:select path="districtID" id="districtID" onchange="getNextListItems(document.addBuildingForm,'getTaluksList','addBldg','/add.do');"> 
         <form:option value="-1">--Select--</form:option> 
        </form:select> 
       </td> 
       <th> 
        <form:label path="talukID"> 
         Taluk 
        </form:label> 
       </th> 
       <td> 
        <form:select path="talukID" id="talukID" onchange="getNextListItems(document.addBuildingForm,'getVillagesList','addBldg','/add.do');"> 
         <form:option value="-1">--Select--</form:option> 
        </form:select> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="4"> 
        <form:checkbox path="isTown" id="isTown"/> 
        <form:label path="isTown"> 
         List only Towns (villages with population >= 10,000) 
        </form:label> 
       </td> 
      </tr> 
      <tr> 
       <th> 
        <form:label path="villageCode"> 
         Town/Village 
        </form:label> 
       </th> 
       <td> 
        <form:select path="villageCode" id="villageCode"> 
         <form:option value="-1">--Select--</form:option> 
        </form:select> 
       </td> 
      </tr> 
      <tr> 
       <th> 
        <form:label path="yearOfConstID"> 
         Year of Construction 
        </form:label> 
       </th> 
       <td> 
        <form:select path="yearOfConstID" id="yearOfConstID"> 
         <form:option value="-1">--Select--</form:option> 
        </form:select> 
       </td> 
       <th> 
        <form:label path="buildingTypeID"> 
         Type of Building 
        </form:label> 
       </th> 
       <td> 
        <form:select path="buildingTypeID" id="buildingTypeID"> 
         <form:option value="-1">--Select--</form:option> 
        </form:select> 
       </td> 
      </tr> 
      <tr> 
       <th> 
        <form:label path="buildingName"> 
         Name of Building 
        </form:label> 
       </th> 
       <td> 
        <form:input path="buildingName" id="buildingName"/> 
       </td> 
      </tr> 
      <tr> 
       <th> 
        <form:label path="noOfFloors"> 
         No. of Floors 
        </form:label> 
       </th> 
       <td> 
        <form:input path="noOfFloors" id="noOfFloors" maxlength="3"/> 
       </td> 
      </tr> 
      <tr> 
       <td> 

       </td> 
      </tr> 
     </table> 
    </form:form> 
+0

あなたはセッションにあなたのものを置くことができ、それはまったく問題ありません。したがって、リクエストごとに再フェッチする必要はありませんが、セッションの時間に存続します。 – george

答えて

0

はセッションですが、以前に選択した項目はしません実際にモデルをバインドしないか、各変更時に部分的に完了したフォームを送信しない限り、ページの更新時に選択する必要があります。

セッションを回避し、@ModelAttributeでアノテーションされたメソッドを作成できます。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-methodsを参照してください。そのコントローラーを介した要求に対しては、リストに値が入力されます。これにより、誤ったアイテムが選択されているという問題は回避されますが、セッションの使用は避けられます。

すべてを修正するより良い方法は、更新された<select/>を含むHTMLフラグメントを返すAjax呼び出しを行うことです。つまり、ページ全体をリフレッシュすることは避けますが、それを調べる必要があります。

関連する問題