当前位置: 首页 > 知识库问答 >
问题:

将对象从th:each循环发送到控制器

尤祖鹤
2023-03-14

我有窗体和相应的控制器,对象列表被传递给它们。

实体类:

    @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:each循环变量不能是th:object=${ent2}(因为如果我这样做,select form返回null)。而th:value="${ent2.name}返回字符串值。所以我不得不将@RequestParam(th:value)发送给“save”方法。但是在这种情况下,我必须对数据库进行额外的请求,以获取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>

并将(@ModelAttribute(“ent2”)Entity2 ent2而不是@RequestParam)发送到“save”方法,以避免对数据库的冗余请求?

共有1个答案

张昊穹
2023-03-14

我已经解决了问题 th:field=“*{entity2Field} 的工作方式类似于 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>
 类似资料:
  • 我在将对象列表从Thymeleaf保存到控制器时遇到了一个大问题。thymeleaf中的对象列表由Jquery生成。但我不知道如何将数据传输到控制器,对象列表不知道大小。因为用户可以随时添加它。请帮助我将thymeleaf中的列表对象发送给控制器。 我创建了一个具有1个属性的新类:ArrayList loaiDoans;“LoaiDoan”是我想要保存的对象。使用该类是将列表“loaidon”从t

  • 我的视图中有一个向控制器发送对象的表单,但问题是,如果我发送的对象超过256个,就会出现异常: 所以我在想为什么会有这样的限制,于是我找到了这个话题:https://stackoverflow.com/a/24699008/4173394 但它似乎对我不起作用(可能是我的一个坏习惯)。 下面是我的结构:我的视图名为createUpdate.vm,并像这样发布我的表单: 我在FollowerFile

  • 我是百里香菜鸟。我试图创建一个简单的crud应用程序。我试图在删除按钮上删除客户类的对象。我如何使用百里香叶为调用deleteUser的方法设置参数(例如- id)。这是我的控制器。 以下是我的看法。

  • seleccion“对象它是一个实体,具有我从Ajax发送的JSON的一些属性,”seleccionados“是一个列表,保存接收到的数组,但当我发送它时,obj参数总是返回一个空对象,Ajax发送错误函数,我认为问题是我在向对象发送数组,但我不知道如何解决它 选择对象模型:

  • 我试图通过AJAX向Spring控制器发送JSON对象,但收到错误415: 下面是我的javascript调用- 这里是我的依赖项杰克逊相关的依赖项在我的POM- 讽刺的是,当我试着穿Spring靴的时候,它就起作用了。

  • JS: 豆角 错误: 对于一个简单的任务来说,这太复杂了。