如何制作没有重复元素的下拉列表?

时间:2018-10-30 11:08:47

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

我有一个对象列表和多个下拉列表。我想显示列表中的数据。但是我的问题是我不想有这样的东西:

例如:我不想在下拉菜单中输入文件名两次:

file1
file1
file2
file3
file3

我只想拥有:file1, file2, file3

这是我的控制器,我将列表放入模型中

@GetMapping("/filter/functionality/misramessages")
public String filterFunctionality(Model model) {
    model.addAttribute("misraMessages", misraMessagesService.findAllMisraMessagesFromDb());
    return "functionality";
}

然后在html中执行以下操作:

 <!-- Filter File Name-->
        <div class="form-group row">
            <label for="fileName" class="col-sm-2 col-form-label">File Name</label>
            <div class="col-sm-10">
                <select class="form-control"  name="file_name" id="fileName">
                    <option th:value="0" text="Please Select"></option>
                    <option  th:each = "misra : ${misraMessages}"
                             th:value="${misra.fileName}"
                             th:text="${misra.fileName}">
                    </option>
                </select>
            </div>
        </div>

<!-- Filter Message Number-->
        <div class="form-group row">
            <label for="messageNumber" class="col-sm-2 col-form-label">Message Number</label>
            <div class="col-sm-10">
                <select class="form-control"  name="message_number" id="messageNumber">
                    <option th:value="0" text="Please Select"></option>
                    <option  th:each = "misra : ${misraMessages}"
                             th:value="${misra.messageNumber}"
                             th:text="${misra.messageNumber}">
                    </option>
                </select>
            </div>
        </div>
        .......
        .......

4 个答案:

答案 0 :(得分:3)

好吧,我希望misraMessagesService.findAllMisraMessagesFromDb()返回String的列表。因此,如果您不想更改findAllMisraMessagesFromDb()方法,可以执行以下操作:

List<String> messages = misraMessagesService.findAllMisraMessagesFromDb();
Set<String> uniqueMsgs = new HashSet<String>(messages);

或者您也可以在misraMessagesRepository中创建一个新方法:

@Query("SELECT DISTINCT name FROM MisraMessages")
public List<MisraMessages> findDistinctMisraMessagesFromDb();

这两个都可以。

答案 1 :(得分:2)

千万不要采用JAVA方式来做同样的事情,因为这只是处理时间的两倍。

我会避免使用Java级代码进行处理,因为查询级很容易做到这一点。

只需使用 Select distinct 关键字,它就可以像超级按钮一样工作。!!

保持简单。

答案 2 :(得分:1)

如果这会引起问题并且需要删除重复项,最好不要将重复项带入内存。

因此,无需使用存储库方法-misraMessagesRepository.findAll();,而是需要在该存储库中编写一个返回DISTINCT结果的新方法,并在DAO中使用该方法。

@Query("SELECT DISTINCT * FROM MESSAGES_TABLE" , nativeQuery = true)
List<MisraMessages> findDistinctMessages();

您尚未显示存储库,因此我使用了虚拟表名称。如果仍然感到困惑并且需要更好的答案,请显示您的存储库代码和实体详细信息。

答案 3 :(得分:0)

将您的列表转换为Set。它将删除您的重复项,然后放入模型中。