2016-03-31 118 views
1

我已经在用于输入搜索参数并显示结果的jsp页面上设置了Spring“选择”窗体标记。 Spring form select tage允许用户选择多个项目,因为“multiple = true”选项。我遇到了问题,让结果显示突出显示选择了多个项目。弹簧窗体选择标记不会突出显示多个项目

如果用户选择单个项目,它会在窗体的重新显示时高亮显示(输入的搜索参数仍显示在页面的上半部分,搜索结果显示在下半部分)。

单项选择:

Single Item Selected

单项仍显示响应显示器上所选择的:

Single item still shown as selected on response display

然而,如果选择了多个项目,所述多个选择不在结果显示上突出显示:

多个项目选择特德:在结果显示未显示

Multiple Items selected:

多个项目:

Multiple items not shown in results display

下面是相关的JSP代码:

行动命令:

<form:form action="/${localePath}/search/ssSearch.do" method="post" modelAttribute="searchCommand" onsubmit="return trackSearch();"> 

选择代码:

<tr valign="top"><td>Test Items</td><td> 
<form:select path="testItems" multiple="true" size="4"> 
     <form:option value="">All Items</form:option> 
     <form:options items="${testItems}" /> 
</form:select> 

Java代码:

这里是在SearchCommand对象的 “testItems” 代码:

private String testItems; 

    public String getTestItems() { 
     return testItems; 
    } 

    public void setTestItems(String testItems) { 
     this.testItems = testItems; 
    } 

这里的控制器请求代码:

@RequestMapping(value = "/*/search/ssSearch.do", method=RequestMethod.POST) 
public String searchResults(HttpServletRequest request, 

@ModelAttribute("searchCommand") SearchCommand command, ModelMap map) 
      throws Exception 
    { 
     return searchResultsDo(command, map, request); 
    } 

这里的使用的代码填充testItems:

Map<String, String> testItemsMap = new TreeMap<String, String>(); 
    testItemsMap.put("item1 name", "item 1 value"); 
    testItemsMap.put("item2 name", "item 2 value"); 
    testItemsMap.put("item3 name", "item 3 value"); 
    testItemsMap.put("item4 name", "item 4 value"); 
    testItemsMap.put("item5 name", "item 5 value"); 
    testItemsMap.put("item6 name", "item 6 value"); 
    testItemsMap.put("item7 name", "item 7 value"); 
    testItemsMap.put("item8 name", "item 8 value"); 

    map.addAttribute("testItems", testItemsMap); 

如何在响应页面上显示多个选定项目?

回答

0

答案是收集地图代码选择的项目,然后参考它在JSP如下:

   <form:select path="testItems2" multiple="true" size="4"> 
        <form:option value="">All Items</form:option>    
         <c:forEach items="${testItems2}" var="testItem2"> 
         <c:choose> 
         <c:when test="${not empty items2SelectedMap[testItem2.key]}"> 
          <form:option value="${testItem2.key}" selected="true">${testItem2.value}</form:option> 
          </c:when> 
          <c:otherwise> 
          <form:option value="${testItem2.key}" >${testItem2.value}</form:option> 
         </c:otherwise>        
         </c:choose> 
        </c:forEach>        
       </form:select> 

Java代码:

 Map<String, String> testItemsMap2 = new TreeMap<String, String>(); 

     List<String> items2SelectedList = null; 
     if(StringUtils.isNotBlank(command.getTestItems2())){ 
      String[] items2Selected = command.getTestItems2().split(","); 
      items2SelectedList = Arrays.asList(items2Selected); 
     } 


     Map<String, String> items2SelectedMap = new HashMap<String, String>(); 
     if (items2SelectedList != null) { 
      for (String item2 : items2SelectedList) { 
       items2SelectedMap.put(item2, item2); 
      } 
     } 
     map.addAttribute("items2SelectedMap", items2SelectedMap);