2017-07-18 2 views
1

Ich muss eine Liste der Produkte nach Preis oder Name, aufsteigend oder absteigend bestellen. Das Back-End ist fertig, ich muss nur einen Parameter senden, der sagt, welche Option aus einer Dropdown-Liste ausgewählt wurde.So bestellen Sie eine Seite mit Artikeln in JSP

<!-- Dropdown for ORDER --> 
<label for="order" class="control-label">Order by</label> 
<select class="form-control" name="order" id="order" onchange="..."> 
    <option value="priceAsc" selected>Price: lowest first</option> 
    <option value="priceDesc">Price: highest first</option> 
    <option value="nameAsc">A - Z</option> 
    <option value="nameDesc">Z - A</option> 
</select> 

Bei onchange habe ich wie onchange="location=location + '/order/'+ this.options[this.selectedIndex].value;" verschiedene Dinge ausprobiert und in der Steuerung abgebildet ich den /order/{orderBy}" Link. Das Problem bei dieser Methode war, dass ich einmal auf ein Element geklickt wird, würde der Link /products/order/option_here werden, und wenn ich noch einmal klicken würde, würde /order/option_here wieder am Ende der Verbindung hinzugefügt werden, was /products/order/option_here/order/option_here

Ich habe auch versucht erhalten den Wert von order in RequestMethod.GET, aber hat nicht funktioniert (ich glaube, weil die Seite Konstrukte nach dem GET Verfahren beendet ist)

die Seite, die ich zu sortieren bin versucht /products genannt wird, so wie kann ich es sortieren aus, sobald der Benutzer seine Option ausgewählt hat?

Dies ist meine Methode in @Controller

@RequestMapping(value = "/order/{orderBy}, method = RequestMethod.GET) 
public ModelAndView sortPageBy(@PathVariable String orderBy){ 
    ModelAndView modelAndView = new ModelAndView("viewProducts"); 
    List<Product> sortedProducts = productService.orderProducts(orderBy); 

    modelAndView.addObject("products", sortedProducts); 

    return modelAndView; 
} 

abgebildet Wir sind nicht erlaubt zu jQuery zu verwenden.

+0

, warum Sie nicht jQuery verwenden dürfen !! Der einfachste Ansatz besteht darin, den Parameter orderBy auf der Client-Seite abzurufen und über Ajax an Ihren Controller zu senden und dann die Produktliste zu erhalten !! Ich sehe, dass du die Dinge dort irgendwie verkomplizierst. – PacMan

+0

Ich mache die Regeln nicht ... folge ihnen nur: \ – SnuKies

+0

Wo willst du es sortieren? In der Steuerung ?! –

Antwort

0

Das Problem ist, dass die location immer "wertet" auf die aktuelle URL, das ist, weil die URL immer erhöhen. In Ihrem Fall wäre es am besten, die Reihenfolge als Anforderungsparameter abzubilden.

zum Beispiel

@RequestMapping(value = "/product", method = RequestMethod.GET) 
public ModelAndView sortPageBy(
    @RequestParam("order") String orderBy){ 
     . . . 
} 

und rufen Sie einfach onSubmit im onchange Ereignis

+0

Es funktioniert nicht, ich bekomme 'HTTP-Status 400' und sage, dass die Zeichenfolge' order' fehlt – SnuKies

+0

Können Sie überprüfen, ob der Browser tatsächlich den Auftragsparameter summit? Die Anfrage-URL sollte etwas wie "http: // _ yourhost_/products? Order = priceAsc" sein – gtosto

+0

deshalb weiß ich nicht, was zu tun ist Ich bin auf der Suche nach einer Möglichkeit, das zu implementieren – SnuKies

Verwandte Themen