过滤List <Object>

时间:2019-08-06 08:12:39

标签: spring list spring-boot spring-mvc thymeleaf

如何使用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;
    }
}

1 个答案:

答案 0 :(得分:2)

您在这里有两种选择,我认为第二种选择更加干净:

  1. 将来自所有国家/地区的所有城市发送到客户端,并将其存储在某个位置(隐藏的输入,隐藏的表,任何位置)。将onchange事件添加到所选的国家/地区,然后使用javascript并根据所选的国家/地区,在城市中加载并选择正确的城市,然后从存储它们的位置进行拾取。

  2. 向选择的国家/地区添加一个onchange事件。在调用的javascript函数上,对控制器进行AJAX调用(因为您使用的是Spring:由于您不会返回视图,因此您需要@RestController而不是@Controller来处理请求,因为您没有返回视图)国家/地区并将其加载到所选的城市中。