将对象从:每个循环发送到控制器

发布于 2025-01-31 23:57:29 字数 2092 浏览 4 评论 0 原文

我有形式和对应控制器传递的对象列表。

实体类:

    @Entity
    public class Entity1
       @Id
       @Column(name="id")
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private long id;
    
       @ManyToOne(cascade = CascadeType.PERSIST)
       @JoinColumn(name = "entity2_id")
       private Entity2 entity2Field; 
    
    @Entity
    public class Entity2
    
       @Id
       @Column(name="id")
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private long id;
    
       @Column(name="name")
       private String name; 

控制器:

    @GetMapping(value="/create")
    puplic String show(Model entity1Model, Model entity2Model){
        
        entity1Model.addAttribute("entity1", new Entity1());
        List<Entity2> list= entity2Repository.findAll();
        entity2Model.addAttribute("entity2list", list);
        return "form"
        }

    @PostMapping(value="/create/new")
    public String save(Entity1 entity1, @RequestParam(name="entity2list) String somevalue{
        Entity2 entity2= entity2Repository.findByName(somevalue);
        entity1.setEntity2Field(entity2)
        entity1Repository.save(entity1)
        return "redirect:/"  
    }

表格:

<form method="post" th:action="@{create/new}">
  <select class="form-control" name="entity2list">
    <option th:each="ent2:${entity2list} 
      th:value="${ent2.name} th:text="${ent2.name}>
  </select>
  <button type="submit"></button>
</form>

我想百里叶th:表单中的每个循环变量都不能为th:object = $ {ent2}(原因,如果我这样做,请选择form return return null)。 th:value =“ $ {ent2.name}返回字符串值。因此,我必须将@requestParam(th:value)发送到“保存”方法。但是在这种情况下,我必须对数据库提出其他请求,以获取Entity2 并将其设置为Entity1

对象

<form method="post" th:action="@{create/new}">
  <select class="form-control">
    <option th:each="ent2:${entity2list} 
      th:object="${ent2} th:text="${ent2.name}>
  </select>
  <button type="submit"></button>
</form>

I have form and corresponding controller to which list of objects is passed.

entity classes:

    @Entity
    public class Entity1
       @Id
       @Column(name="id")
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private long id;
    
       @ManyToOne(cascade = CascadeType.PERSIST)
       @JoinColumn(name = "entity2_id")
       private Entity2 entity2Field; 
    
    @Entity
    public class Entity2
    
       @Id
       @Column(name="id")
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private long id;
    
       @Column(name="name")
       private String name; 

controller:

    @GetMapping(value="/create")
    puplic String show(Model entity1Model, Model entity2Model){
        
        entity1Model.addAttribute("entity1", new Entity1());
        List<Entity2> list= entity2Repository.findAll();
        entity2Model.addAttribute("entity2list", list);
        return "form"
        }

    @PostMapping(value="/create/new")
    public String save(Entity1 entity1, @RequestParam(name="entity2list) String somevalue{
        Entity2 entity2= entity2Repository.findByName(somevalue);
        entity1.setEntity2Field(entity2)
        entity1Repository.save(entity1)
        return "redirect:/"  
    }

form:

<form method="post" th:action="@{create/new}">
  <select class="form-control" name="entity2list">
    <option th:each="ent2:${entity2list} 
      th:value="${ent2.name} th:text="${ent2.name}>
  </select>
  <button type="submit"></button>
</form>

I suppose that thymeleaf th:each loop variable in form can't be th:object=${ent2} (cause if i do this way, select form return null).
Whereas th:value="${ent2.name} return string value. So i had to send @RequestParam(th:value) to "save" method. But in this case i had to do additional request to database, to get Entity2 object and set it to Entity1.

How can i get entity object in some way like:

<form method="post" th:action="@{create/new}">
  <select class="form-control">
    <option th:each="ent2:${entity2list} 
      th:object="${ent2} th:text="${ent2.name}>
  </select>
  <button type="submit"></button>
</form>

and send (@ModelAttribute("ent2")Entity2 ent2 instead of @RequestParam) to the "save" method to avoid redundant request to database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忱杏 2025-02-07 23:57:29

我解决了问题:field =“*{entity2field}的工作

<form method="post" th:action="@{create/new}" th:object="${entity1}">
      <select class="form-control" th:field="*{entity2Field}>
        <option th:each="ent2:${entity2list} 
          th:value="${ent2} th:text="${ent2.name}></option>
      </select>
      <button type="submit"></button>
</form>

i have solved the issue th:field="*{entity2Field} works like setter
https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html#creating-a-form

<form method="post" th:action="@{create/new}" th:object="${entity1}">
      <select class="form-control" th:field="*{entity2Field}>
        <option th:each="ent2:${entity2list} 
          th:value="${ent2} th:text="${ent2.name}></option>
      </select>
      <button type="submit"></button>
</form>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文