Как мне сделать выпадающий список без дубликатов элементов? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть список объектов и несколько раскрывающихся списков. Я хочу отобразить данные из списка. Но моя проблема в том, что я не хотел иметь что-то вроде этого:

Например: я не хочу, чтобы в раскрывающемся списке имя файла дважды:

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 голосов
/ 30 октября 2018

Конвертируйте ваш список в набор. Он удалит ваши дубликаты и поместит их в модель.

0 голосов
/ 30 октября 2018

Никогда не используйте JAVA, чтобы сделать то же самое, потому что это просто двойное время обработки.

Я бы не стал обрабатывать код уровня Java, поскольку это легко сделать по уровню запросов.

Просто используйте ключевое слово Select distinct, и оно работает как шарм .. !!

Будьте проще.

0 голосов
/ 30 октября 2018

Всегда лучше не вводить дубликаты в память, если это вызывает проблемы и требуется удаление дубликатов.

Таким образом, вместо использования метода репозитория - misraMessagesRepository.findAll();, вам нужно написать новый метод в этом репозитории, который возвращает DISTINCT результаты, и использовать этот метод в DAO.

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

Вы не показали свой репозиторий, поэтому я использовал фиктивное имя таблицы. Покажите свой код репозитория и сведения о сущности, если вы все еще не уверены и нуждаетесь в лучшем ответе.

0 голосов
/ 30 октября 2018

Ну, я ожидаю, что misraMessagesService.findAllMisraMessagesFromDb() возвращает список строк. Таким образом, вы можете сделать что-то вроде этого, если не хотите менять свой метод findAllMisraMessagesFromDb():

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

или вы также можете создать новый метод в misraMessagesRepository:

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

любой из двух будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...