2016-03-31 4 views
1

Ich habe ein Spring "select" -Formular-Tag auf einer JSP-Seite eingerichtet, die zur Eingabe von Suchparametern und zur Anzeige der Ergebnisse verwendet wird. Die Spring-Formularauswahl ermöglicht es dem Benutzer, mehr als ein Element aufgrund der Option "multiple = true" auszuwählen. Ich habe ein Problem, wenn in der Ergebnisanzeige hervorgehoben wird, dass mehrere Elemente ausgewählt wurden.Spring Form Select-Tag hebt nicht mehrere Elemente hervor

Es funktioniert gut, wenn der Benutzer ein einzelnes Element auswählt, wird es auf der Wiederanzeige des Formulars hervorgehoben (wobei die eingegebenen Suchparameter weiterhin in der oberen Hälfte der Seite und die Suchergebnisse in der unteren Hälfte angezeigt werden)).

Einzel Artikel ausgewählt:

Single Item Selected

Einzelposten noch als ausgewählt gezeigt auf die Antwortanzeige:

Single item still shown as selected on response display

Wenn jedoch mehrere Elemente ausgewählt werden, sind die Mehrfachauswahl nicht auf der Ergebnisanzeige hervorgehoben:

Mehrere Artikel auswählen ted:

Multiple Items selected:

Mehrere Elemente nicht in Ergebnisanzeige angezeigt:

Multiple items not shown in results display

ist Code der entsprechenden jsp hier:

Aktion Befehl:

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

Code auswählen :

<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-Code:

Hier ist die "Testitems" Code im SearchCommand Objekt:

private String testItems; 

    public String getTestItems() { 
     return testItems; 
    } 

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

der Controller Anforderungscode Ist hier:

@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); 
    } 

Hier ist der Code verwendet um Test Items zu füllen:

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); 

Wie kann ich mehrere ausgewählte Elemente auf der Antwortseite markieren?

Antwort

0

Die Antwort war eine Karte von ausgewählten Elemente in Code zu sammeln und um es dann in der jsp beziehen sich wie folgt: Code

   <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); 
Verwandte Themen