【发布时间】:2014-12-09 20:18:18
【问题描述】:
我正在使用 Spring MVC 4 开发一个 Web 应用程序。
我有一个搜索页面。提交后,会出现一个搜索结果页面。我在搜索结果页面上有一个链接(Revise Search),可以将用户带回搜索页面。
我正在尝试使用用户最初键入的搜索条件显示搜索表单,但保存搜索请求参数的 @ModelAttribute 对象为空。
这是我的控制器和视图 (jsp) 代码的相关部分
@Controller
public class MySearchController extends MyController {
@Autowired
SearchService searchService;
@RequestMapping(value = "/search", method = RequestMethod.GET)
public String search(Model model,
@ModelAttribute("searchParams") SearchParams searchParams,
BindingResult bindingResult) throws Exception {
model.addAttribute("city", searchParams.getCity());
model.addAttribute("zip", searchParams.getZip());
return "search.def";
}
@RequestMapping(value="/submitSearch")
public String submitSearch(Model model,@Valid @ModelAttribute("searchParams") SearchParams searchParams, BindingResult bindingResult, HttpServletRequest request)
throws Exception{
// perform Search
List searchResults = searchService.find(searchParams.getCity(), searchParams.getZip());
model.addAttribute("searchResults", searchResults);
model.addAttribute("searchParams", searchParams);
return "results.def";
}
}
search.def 将映射到 search.jsp
<form:form action="submitSearch" modelAttribute="searchParams" method="GET" id="userSearchForm" >
<table id="search" class="display" border="0" cellpadding="0" width="60%" valign="top">
<tbody>
<tr id="name">
<td><label for="city">City:</label></td>
<td><form:input id="city" path="city" type="text" /></td>
</tr>
<tr id="age">
<td><label for="zip"><br/>Zip:</label></td>
<td><form:input type="text" path="zip" /> </td>
</tr>
</table>
<input id="submit_button" type="submit" name="submitButton" value="Search" > <br/>
</form:form>
results.def 将映射到 results.jsp
<div class="resultHeader">
<ul>
<li><a href="search">Revise search</a></li>
</ul>
</div>
<table id="resultsBody" class="display" valign="top" width="100%">
<thead>
<tr id="results_header" class="thhead">
<th>Name</th>
<th>Type</th>
<th>Identifier</th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${searchResults}" varStatus="rowNum">
<td><c:out value="${result.customerName}"></c:out></td>
<td><c:out value="${result.customerType}"></c:out></td>
<td><c:out value="${result.customerIdentifier}"></c:out></td></tr>
</c:forEach>
</tbody>
< /table>
</div>
现在,当我单击结果页面中的 Revise Search 链接时,searchParams 对象始终保持为空。如何保留原始值? @ModelAttribute,我猜只是请求范围。我是否必须添加它才能将搜索参数作为请求参数一一传递? /search 是一个 GET,我不希望搜索参数使 url 混乱。有什么想法吗?
【问题讨论】:
标签: java spring jsp spring-mvc