如何使用select过滤列表中的对象?我有一个城市模型。该服务将返回所有城市的列表。接下来,我想选择第一个下拉列表中的县,然后在第二个下拉列表中选择仅在该县中的城市。谢谢您的帮助。
控制器:
@GetMapping("/")
public String getCityPage(Model model){
TreeSet<City> cityList=cityService.getAllTown().stream()
.collect(Collectors.toCollection(
() -> new TreeSet<City>((p1, p2) -> p1.getCountry().compareTo(p2.getCountry()))));
model.addAttribute("cityList",cityList);
return "index";
}
html
<body>
<h4>Select Country</h4>
<select>
<option th:if="${not #lists.isEmpty(cityList)}" th:each="city : ${cityList}" th:text="${city.country}" th:value="${city.country}"></option>
</select>
<h4>Select City</h4>
<select></select>
</body>
服务
@Service
public class CityServiceImpl implements CityService {
@Autowired
CityRepository cityRepository;
@Override
public City createTown(City city) {
return cityRepository.save(city);
}
@Override
public List<City> getAllTown() {
return cityRepository.findAll();
}
@Override
public City getCityById(Long id) {
return cityRepository.findById(id).get();
}
@Override
public List<City> getAllTownsInCountry(String country) {
return getAllTown().stream().filter(t->t.getCountry().equals(country)).collect(Collectors.toList());
}
}
型号
@Getter
@Setter
@NoArgsConstructor
@Entity
public class City {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String country;
@NotNull
private String townname;
@NotNull
private Double area;
public City(@NotNull String country, @NotNull String townname, @NotNull Double area) {
this.country = country;
this.townname = townname;
this.area = area;
}
}
答案 0 :(得分:2)
您在这里有两种选择,我认为第二种选择更加干净:
将来自所有国家/地区的所有城市发送到客户端,并将其存储在某个位置(隐藏的输入,隐藏的表,任何位置)。将onchange事件添加到所选的国家/地区,然后使用javascript并根据所选的国家/地区,在城市中加载并选择正确的城市,然后从存储它们的位置进行拾取。
向选择的国家/地区添加一个onchange事件。在调用的javascript函数上,对控制器进行AJAX调用(因为您使用的是Spring:由于您不会返回视图,因此您需要@RestController而不是@Controller来处理请求,因为您没有返回视图)国家/地区并将其加载到所选的城市中。