2016-07-01 112 views
1

我創建了一個頁面,使用彈簧啓動&百里香葉從數據庫搜索學生。在我的SearchStudent.html頁面中,有3個字段作爲搜索參數(firstName,lastName,city)。我的要求是,即使沒有輸入參數(全部搜索)或基於參數,搜索也應該可以工作。 '搜索全部'條件正在工作,但不確定如何在搜索條件中傳遞一些或全部參數時如何更改控制器以正常工作。如何在springboot中將參數值傳遞給控制器​​

SearchController

@Controller 
@ComponentScan 
public class SearchController { 

    @Autowired 
    protected StudentRepository repository; 

    @RequestMapping(value = {"/","/search"}, method = RequestMethod.GET) 
    public String search(Model model) { 
     model.addAttribute("student", new Student()); 
     model.addAttribute("allStudents", (ArrayList<Student>)repository.findAll()); 
     return "SearchStudent"; 
    } 

SearchStudent.html

<div class="panel-body"> 
    <form th:object="${student}" th:action="@{/search}" action="#" method="get"> 
     <input type="text" th:field="*{firstName}" class="form-control" placeholder="First Name" /> 
     <div style="clear: both; display: block; height: 10px;"></div> 
     <input type="text" th:field="*{lastName}" class="form-control" placeholder="Last Name" /> 
     <div style="clear: both; display: block; height: 10px;"></div> 
     <input type="text" th:field="*{city}" class="form-control" placeholder="City" /> 
     <div style="clear: both; display: block; height: 10px;"></div> 
     <input type="submit" class="btn btn-danger pull-right" value="Search"> 
     <input type="submit" class="btn btn-success pull-right" value="Clear"> 
    </form> 
</div> 

回答

1

你的形式結合表單字段到第一個:對象$ {學生}作爲輸入參數的HTTP POST你的控制器需要實現的方法。它應該是這樣的:

@RequestMapping(method=RequestMethod.POST, value="/search") 
public ModelAndView doSearch(Student student){ 
    // do your conditional logic in here to check if form parameters were populated or not 
    // then do something about getting results from the repository 
    List<String> students = repository.find....; 
    // return a model and a view (just as an example) 
    ModelAndView mv = new ModelAndView(); 
    mv.addObject(students); 
    mv.setViewName("/results"); 
    return mv; 
} 

您還應該設置你的形式,以「後」

<form th:object="${student}" th:action="@{/search}" action="#" method="post"> 

方法提交與輸入字段數據的形式被放入一個模型,併發送應通過HTTP POST,請參閱:http://www.w3schools.com/tags/att_form_method.asp

或者,您可以添加第二個不同的GET請求映射,它從URL參數中解析表單域。留下的形式方法「獲得」,則要再添加一個GET請求映射如下:

@RequestMapping(value = {"/search"}, method = RequestMethod.GET) 
public String doSearch(@PathVariable String firstName, @PathVariable String lastName, @PathVariable String city) { 
    // Add your conditional logic to search JPA repository based on @PathVariable values delivered from form submission using HTTP GET 

    List<String> students = repository.find....; 
    ModelAndView mv = new ModelAndView(); 
    mv.addObject(students); 
    mv.setViewName("/results"); 
    return mv; 
} 

但一定要知道的侷限性,以及使用形式方法=「得到」發送表單數據的安全影響。

+0

我用你的例子findAll但得到錯誤------------有一個意外的錯誤(type = Method Not Allowed,status = 405)。 請求方法'GET'不支持----------------如果我刪除method = RequestMethod.POST它的作品,但沒有記錄顯示。 – Muhammad

+0

我想我的編輯上面應該幫助..請檢查它:) :) –

+1

我也嘗試過,但沒有運氣:( – Muhammad

相關問題