0

次の場合、次の Bootstrap リストセレクターをバインドするにはどうすればよいですか? コントローラーからindex.jspに渡されたビューモデルから、選択リストに問題なく入力しました。ただ、結び方にはかなりのバリエーションがあるようです。

class viewModel {
  List<String> theList;      // <- populated in my GET controller code
  String selectedListItem;   // <- trying to figure out how to get selected list item?
  o o o
  // assume get/set
}

index.jsp:

(送信ボタンのクリックでポストバックが正常に取得され、ビューモデルにアクセスできますが、リストから選択したアイテムを取得する方法を理解する必要があります。)

    <form class="form-horizontal" action="myController/indexSubmit" method="post">
        <select class="form-control" placeholder=".input-medium" height>
            <c:forEach items="${viewModel.gettheList()}" var="item" varStatus="count"> 
                <option value="${count.index}">${item }</option>
            </c:forEach>
        </select>   
        <button type="submit" class="btn btn-primary btn-medium">Submit</button>   
    </form> 

コントローラ:

@RequestMapping(value="indexSubmit", method = RequestMethod.POST)
public String indexSubmit(@ModelAttribute("viewModel") viewModel viewModel, ModelMap model) {
    String item = viewModel.getselectedListItem(); // <- How can I pass this in?
    System.out.println("Selected Item: " + item);
    return "myController/index";  // <- want to add as query param: ?item=theItem  
}   
4

1 に答える 1

2

要素のリストをバインドするための特別なクラスを作成する必要はありません。select をコントローラーにバインドする最も単純な例:

コントローラ:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(HttpServletRequest request, Model model) {  
    List<String> listString = new ArrayList<String>();
    listString.add("hello");
    listString.add("world");
    listString.add("from");
    listString.add("Belarus");
    model.addAttribute("listString", listString);
    return "index";
}

@RequestMapping(value = "test", method = RequestMethod.POST)
public String test(@RequestParam String selectedString, Model model) {
    System.out.println(selectedString);
    return "index";
}

index.jsp:

<form class="form-horizontal" action="${home}/test" method="post">
    <select name="listString" class="form-control">
        <c:forEach items="${listString}" var="item" varStatus="count"> 
            <option value="${count.index}">${item}</option>
        </c:forEach>
    </select>   
    <button type="submit" class="btn btn-primary btn-medium">Submit</button>   
</form> 

フォームを送信した後にそのコードを使用すると、選択した項目のインデックスがコンソールに表示されます。

初期リスト (listItem) も転送する場合は、すべてのアイテムを選択して属性multiple="multiple"を選択し、そのスタイルを display: none; に設定して別の選択を行うことができます。この後、別のパラメーターを宣言する@RequestParam List<String> listStringと、文字列の初期配列が取得されます。

パラメータの追加について:

return "myController/index";  // <- want to add as query param: ?item=theItem  

そのようにパラメータを渡すことはできません。これは、ビューの名前(単に jsp の名前のタイル)を返しますが、url を返さないためです。パラメータを指定して URL に移動する場合は、次のようにします。

return "forward:/index?item=theItem";

それが役に立てば幸い

于 2013-08-20T21:06:32.720 に答える