java - 如何从 thymeleaf 中的两个部分创建链接?

标签 java spring-mvc thymeleaf

我是 thymeleaf 的新手。 我需要创建由 Controller (PersonController 类)的路径和对象 ID(我从列表中获取)组成的链接。我希望列表中的每个Person 对象都有自己的链接,如下所示:href="/personData/person.id'。 这是我的代码,它给了我一个错误 org.thymeleaf.exceptions.TemplateInputException: 模板解析期间发生错误:

<div th:each="person : ${persons}" th:with="hrefToPerson=${/personData/ + ${person.id}}">
    <a th:href=hrefToPerson>Edit</a>
        <p th:text="${person.id} + ' ' + ${person.getLastName()} + ' ' + ${person.getFirstName()} + ' ' + ${person.getPatronymic()}"/>

    <p>Phones:</p>
    <ol>
        <li th:each="phone: ${person.getPhoneNumbers()}" th:text="${phone.getType()} + ' ' + ${phone.getNumber()}"></li>
    </ol>
    <p>Address: </p>
    <ol>
        <li th:each="address:${person.addresses}" th:text="${address.getZipCode()} + ', ' + ${address.getCountry()} +
', ' + ${address.getRegion()} + ', ' + ${address.getCity()} + ', ' + ${address.getAddressLine2()} + ' ' + ${address.getAddressLine1()}"></li>
    </ol>
</div>

Controller :

@Controller
@RequestMapping("/personData")
public class PersonController {
    @Autowired
    private PersonRepository personRepo;


    @GetMapping("{person}")
    public String personEditForm(@PathVariable Person person, Model model) {
        model.addAttribute("person", person);
        return "personEdit";
    }

    @PostMapping
    public String personSave(@RequestParam Person person, Model model) {

        return "personEdit";
    }
}
<小时/>

类人:

@Entity
@NamedQuery(name = "Person.findByPhone",
        query = "select p from Person as p join p.phoneNumbers as pn where pn.number = :number")
@Table(uniqueConstraints={
        @UniqueConstraint(columnNames = {"lastName", "firstName", "patronymic"})
})
public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String lastName;

    @NotNull
    private String firstName;

    private String patronymic;

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "person_phone_numbers", joinColumns = @JoinColumn(name = "person_id"))
    private Set<PhoneNumber> phoneNumbers = new HashSet<>();

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "person_addresses", joinColumns = @JoinColumn(name = "person_id"))
    @AttributeOverrides({
            @AttributeOverride(name = "addressLine1", column = @Column(name = "house_number")),
            @AttributeOverride(name = "addressLine2", column = @Column(name = "street"))
    })
    private Set<Address> addresses = new HashSet<>();

    public Person() {
    }

    public Person(String lastName, String firstName, String patronymic,
                  Set<PhoneNumber> phoneNumbers, Set<Address> addresses) {
        this.lastName = lastName;
        this.firstName = firstName;
        this.patronymic = patronymic;
        this.phoneNumbers = phoneNumbers;
        this.addresses = addresses;

    }

getter 和 setter ... }

最佳答案

它的结构应该是这样的:

<div th:each="person: ${persons}">
    <a th:href="@{/personData/{id}(id=${person.id})}">Edit</a>

请参阅standard url syntax 。您可以使用 th:with 执行相同的表达式,但我看不出您有任何理由要这样做,除非您重用该网址。

<div th:each="person: ${persons}" th:with="hrefToPerson=@{/personData/{id}(id=${person.id})}">
    <a th:href="${hrefToPerson}">Edit</a>

关于java - 如何从 thymeleaf 中的两个部分创建链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51769571/

相关文章:

java - 为什么我不能通过 Intent 传递数据?

java - 具有多个方法源的 JUnit5 参数化测试

java - 将二叉树的所有路径打印为 0 和 1 的字符串

java - Thymeleaf - 输入动态字符串列表

java - Spring Swagger2集成ServletContext Autowiring 问题

java - Thymeleaf:使用相同的模板和来自不同 Controller 的动态 url

java - 如何使用 Thymeleaf 模板打印 HashMap 的 ArrayList 中的元素数量?

java - 错误: JAVA_HOME is set to an invalid directory in libGDX

java - 如何使用 DiscriminatorValue 保存实体

java - 如何检查 thymeleaf 中表字段的类类型?