Thymeleaf - как связать список объектов с составным ключом для выбора - PullRequest
0 голосов
/ 18 мая 2019

Я борюсь с этой ситуацией.

У меня есть объект Threshold, который имеет отношение ManyToMany с объектом ToolCommand, который имеет составной ключ.

public class Threshold{
...
@ManyToMany
private Set<ToolCommand> toolCommands

...
}

public class ToolCommand implements Serializable{

@EmbeddedId
private ToolCommandKey id;

@ManyToMany(mappedBy="toolCommands")
private Set<Threshold> thresholds;
 ...
}

@Embeddable
public class ToolCommandKey implements Serializable{

    @Column(name="tool_id")
    private long toolId;

    @Column(name="command_id")
    private long commandId;

}

Теперь проблема заключается в тимелии, мне нужно предоставить множественный выбор, где вы можете выбрать ToolCommands для Threshold, потому что я не знаю, что добавить в атрибут th:value для привязки

Не работает, если я так делаю

<select class="form-control" th:field="*{toolCommands}" th:multiple="multiple">
                        <option th:each="t : ${toolCommands}" th:value="${t.id}" th:text="${t.tool.name + '-' + t.command.name}">Option</option>
                    </select>

потому что он анализирует t.id как toString ()

Итак, я попытался таким образом

<select class="form-control" th:field="*{toolCommands}" th:multiple="multiple">
                        <option th:each="t : ${toolCommands}" th:value="${t.id.toolId + ',' + t.id.commandId}"
                            th:text="${t.tool.name + '-' + t.command.name}">Option</option>
                    </select>

и добавил форматтер

@Component
public class ToolCommandFormatter implements Formatter<ToolCommand>{

    private final Logger logger = LoggerFactory.getLogger(ToolCommandFormatter.class);

    @Autowired
    private IToolService toolService;

    @Autowired
    private ICommandService commandService;

    @Autowired
    private IToolCommandService toolCommandService;

    @Override
    public String print(ToolCommand object, Locale locale) {

        return object.getTool().getToolId() + "," + object.getCommand().getCommandId() ;
    }

    @Override
    public ToolCommand parse(String text, Locale locale) throws ParseException {
        logger.debug(text);
        String[] ids = text.split(",");
        Tool t = toolService.findByToolId(Long.parseLong(ids[0]));
        Command c = commandService.finfById(Long.parseLong(ids[1]));
        return toolCommandService.findById(t, c);
//      return null;
    }

Теперь это работает, когда я сохраняю новый порог, но при попытке отредактировать существующий, он не может отрендерить выделение.

Есть ли стандартный способ справиться с этой ситуацией?

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