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

异常将id字段发送到@PostMap

靳彦
2023-03-14

我在尝试使用后期映射更新对象时遇到以下异常

原因:org.thymeleaf.exceptions。TemplateProcessingException:异常评估SpringEL表达式:“libro.id”(模板:“formulario-modificar-libros-p”-第18行,第15列)

原因:org.springframework.expression.spel。SpelEvaluationException:EL1007E:在null上找不到属性或字段“id”

形式:

<form th:action="@{/libros/modificar-libro-d/__${libro.id}__}" method="post">
     <input hidden th:value="${libro.id}" name="id">
     <div class="form-group">
         <label>ISBN del libro</label> <input th:value="${libro.isbn}" type="number" class="form-control" name="isbnLibro" required>   
     </div>
     <div class="form-group">
         <label>Título del libro</label> <input th:value="${libro.titulo}" type="text" class="form-control" name="tituloLibro" required>
     </div>
     <div class="form-group">
         <label>Año del libro</label> <input th:value="${libro.anio}" type="number" class="form-control" name="anioLibro">
     </div>
     <div class="form-group">
         <label>Ejemplares del libro</label> <input th:value="${libro.ejemplares}" type="number" class="form-control" name="ejemplaresLibro" required>
     </div>
     <div>
         <label>Autor</label>
         <select class="form-select" aria-label="Default select example" name="nombreAutor">
             <option th:each="autor:${autores}"
                     th:text="${autor.nombre}"
                     th:value="${autor.nombre}"
             >    
             </option>
         </select>
     </div>
     <div>
         <label>Editorial</label>
         <select class="form-select" aria-label="Default select example" name="nombreEditorial">
             <option th:each="editorial:${editoriales}"
                     th:text="${editorial.nombre}"
                     th:value="${editorial.nombre}"
             >    
             </option>
         </select>
     </div>
     <button type="submit" class="btn btn-primary">Aceptar</button>
 </form>

控制器

@PostMapping("/modificar-libro-d/{id}")
public String modificarLibroM(@PathVariable String id, @RequestParam Long isbnLibro, @RequestParam String tituloLibro, @RequestParam Integer anioLibro,
        @RequestParam Integer ejemplaresLibro, @RequestParam String nombreAutor, @RequestParam String nombreEditorial){
    try {
        libroServicio.modificarLibro(id, isbnLibro, tituloLibro, anioLibro, ejemplaresLibro, nombreAutor, nombreEditorial);

        return "redirect:/libros/lista-libros-d";
    } catch (Exception e) {
        return "formulario-modificar-libros-p";
    }
}

@GetMapping("/modificar-libro-d/{id}")
public String formularioModificarLibrosM(@PathVariable String id, ModelMap modelo) {
    modelo.addAttribute("libro", libroServicio.buscarLibroPorId(id));
    modelo.addAttribute("autores", autorServicio.listarAutoresAlta());
    modelo.addAttribute("editoriales", editorialServicio.listarEditorialesAlta());
        
    return "formulario-modificar-libros-p";
}

在实体中,所有字段都正确地具有其getter和setter。

共有1个答案

劳嘉实
2023-03-14

看起来您的代码没有问题,但book服务上的find by id方法对于给定的id返回null。在其上放置一个断点并在调试中运行。如果必须始终存在libro对象,请考虑定义libroServicio。buscarLibroPorId(id)方法,以便为丢失的id引发异常和/或在您的thymeleaf模板中设置错误处理。

 类似资料:
  • 我在从JSON发送日期字段时收到一个错误。 Pojo类: 错误: JSON分析错误:无法从字符串“2018-07-10”反序列化类型的值:格式应为“yyyy-mm-dd hh:mm:ss.000”;嵌套异常为com.fasterxml.jackson.databind.exc.InvalidFormatException:无法从字符串“2018-07-10”反序列化类型的值:格式应为“yyyy-m

  • 我正在使用Hibernate。我有一把刀: 在哪里 并用@Entity注释。 它包含它所表示的表的所有列名。 然后,我的服务类自动连接了上述dao对象。我可以看到DmRequestDomain的值正确地打印在日志文件中。 但是当我通过这条道调用add时,我在我的服务器日志中看到所有的空值都被发送了。 可能的原因是什么。 我在服务器日志中看到的查询是

  • 我有一个包含EditText的片段,当我单击该EditText时,会出现一个DatePicker对话框来选择日期。 FragmentFile 对话框片段 问题是我不知道如何将数据(选定日期)从DialogFraank传递到片段? 我读了一些主题,但这并没有帮助我感到困惑(抱歉再次提出这个问题)。 主题1主题2

  • 问题内容: 我在Windows7上使用Selenium和python。 我的代码: 该代码有效,但是当打开时,即“电话”的数字化非常慢(大约20秒)。在Firefox中,它几乎是瞬时的。 为什么这样?这是正常的?我做错了吗? PS:另外,将IEDriverServer.exe放在哪里更好?在内部,所以对于我的所有项目或在每个项目中,我只有一个文件(例如注释掉的部分)? 问题答案: 是的,您没看错。

  • 我想发送数据到一个特定的套接字ID。 在旧版本中,我们曾经能够做到这一点: 我将如何在Socket.io1.0中执行类似的操作?

  • 我们有一个apache beam数据流作业,该作业从大查询中读取数据,并在使用Datastax驱动程序写入Cassandra之前将其转换为POJO。我最近在表中添加了一个新的blob列,并在POJO中添加了一个ByteBuffer字段。 我是如何创建ByteBuffer的 这是管道片段公共空执行管道()抛出异常{ 。。。。writeDataToCassandra(installSkuData);