Filtrowanie wartości

0

Cześć, mam problem z filtrowaniem wartości wydaję się być wszystko w porządku ale kiedy wciskam magiczny button search status - 404 i za bardzo nie wiem czemu.

carRepoImpl:

@Override
	public Set<car> getCarByParams(Map<String, List<String>> params) {
		Set<car> carByMark = new HashSet<car>();
		Set<car> carByModel = new HashSet<car>();
		Set<String> criterion = params.keySet();
		
		if(criterion.contains("mark")){
			for(String model : params.get("mark")){
				for(car c : list){
					if (model.equalsIgnoreCase(c.getCarMark())){
						carByMark.add(c);
					}
				}
			}
		}
		
		if(criterion.contains("model")){
			for(String model : params.get("model")){
				for (car c:list){
					if(model.equalsIgnoreCase(c.getCarModel())){
						carByModel.add(c);
					}
				}
			}
		}
		
		carByMark.retainAll(carByModel);
		return carByMark;
	}

Implementacja w kontrolerze:

@RequestMapping("filtr/{parametryFiltru}")
	public String pobierzSamochodyWedlugFiltru(@MatrixVariable(pathVar="parametryFiltru") Map<String, List<String>> parametryFiltru, Model model)
	{
		model.addAttribute("samochody", carService.getCarByParams(parametryFiltru));
		return "samochody";
	}

Tutaj mam html z polem filtru:

<div class="searchField">
					Proszę wpisać markę oraz model poszukiwanego samochodu
					
					<br>
					<form action="/project/cars/filtr?carMark=${car.carMark };carModel=${car.carModel}" method="GET">
						Marka: <input type="text" name="carMark"> <br>
						Model: <input type="text" name="carModel" /><br/> 
						<input class="btn btn-default" type="submit" value="Submit" />
					</form>
					
				</div>

Jeśli ktoś może na to spojrzeć fachowym okiem i powiedzieć co jest skopane to będzie miło, przy okazji może coś można by było poprawić :)

0

Na początek to:
filtr/{parametryFiltru}
W cale nie odpowiada temu:

filtr?carMark=${car.carMark };carModel=${car.carModel}

Moja propozycja (zakładając że prefix project/car jest prawidłowy)

@RequestMapping("filtr")
    public String pobierzSamochodyWedlugFiltru(@RequestParam(value = "carMark", required = false) carMark, @RequestParam(value = "carModel", required = false) carModel )
    {
        model.addAttribute("samochody", carService.getCarByParams(carMark, carModel));
        return "samochody";
    }

Wtedy dostaniesz jeden model i jedną markę, czyli tyle ile masz inputów.

Co do serwisu z samochodami, zainteresuj się Stream z javy 8 jeżeli możesz jej użyć. Baaardzo ułatwi Ci to życie :).

0

Po szybszym przejrzeniu muszę powiedzieć że dość fajna sprawa :D rozwiązanie przetestuje w domu i zdam relacje :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1