我的项目基于spring boot,Thymeleaf,mysql,html和Jquery。
我的情况 是获取列表进行迭代,并在HTML的表1st列中显示数据,然后发布从动态输入字段获取的数据(html- chargesName和输入金额)并将其保存到相关列中,因此它将需要打Spring Boot@RestController。
但是我得到了Thymeleaf错误
org.springframework.expression.spel.SpelEvaluationException:EL1007E:在null上找不到属性或字段“ chargesName”
这是完整代码…
/** * This is for set charges form */ $(document).ready(function() { $("select").change(function() { var amttype = $(this).val(); if (amttype == 1) { $("#amt1").show(); $("#amt2").hide(); $("#amt3").hide(); } else if (amttype == 2) { $("#amt1").hide(); $("#amt2").show(); $("#amt3").hide(); } else if (amttype == 3) { $("#amt1").hide(); $("#amt2").hide(); $("#amt3").show(); } else { $("#amt1").hide(); $("#amt2").hide(); $("#amt3").hide(); } }); }); <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> <!-- bootstrap css lib --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> </head> <body> <!-- Bootstrap/Jquery CDN library files --> <script src="https://code.jquery.com/jquery-3.2.1.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <!-- External JQuery Script --> <script type="text/javascript" src="../js/formjs/setchargesform.js"></script> <!-- Body Content Goes Here --> <div class="container"> <form method="post" th:object="${entSetCharges}" th:action="@{/updatesetcharges}"> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Charge Name</th> <th>Amount</th> <th>Charge/Unit Type</th> </tr> </thead> <tbody> <tr th:each="savedcharges:${savedchargeslist}"> <td> <label th:text="${savedcharges.chargesName}" th:value="${savedcharges.chargesName}" th:field="*{chargesName}"></label> </td> <td> <input id="amt1" class="form-control" th:field="*{perFlat}"> <input id="amt2" class="form-control" th:field="*{perUnit}"> <input id="amt3" class="form-control" th:field="*{perSqrft}"> </td> <td> <select id="societyname" class="form-control" th:field="*{tempunitType}"> <option value="1" selected="selected">perFlat</option> <option value="2">perUnit</option> <option value="3">perSqrft</option> </select> </td> </tr> </tbody> </table> </div> <button type="submit" class="btn btn-info">Submit</button> <button type="reset" class="btn btn-warn">Reset</button> </form> </div> <!-- Body content finishes --> </body> </html>
@RestController
@GetMapping(value="/setchargeslist") public ModelAndView doGetSetchargesList() { List<EntSetCharges> listCharges = new ArrayList<>(); ModelAndView respondResult = new ModelAndView("SetCharges"); try { /*Get the set charges list*/ listCharges = serSetCharges.doGetSetChargesList(); if(listCharges!=null) { respondResult.addObject("savedchargeslist",listCharges); } else { respondResult.addObject("savedchargeslist",new ArrayList<>()); } } catch (Exception e) { // TODO: handle exception } return respondResult; }
实体
@Entity @Table(name="setcharges") public class EntSetCharges implements Serializable { /** * */ private static final long serialVersionUID = 3827507518731160293L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="pksetcharges") private int pkSetCharges; @Column(nullable=false) private String chargesName; @ColumnDefault("0") private int perFlat; @ColumnDefault("0") private double perUnit; @ColumnDefault("0") private double perSqrft; @Version private int version; private Boolean is_active; private String created_by; private Date created_ts; private String modified_by; private Date modified_ts; private String approved_by; private Date approved_ts;
您使用了html页面顶部的表单:
<form method="post" th:object="${entSetCharges}" th:action="@{/updatesetcharges}">
将th:field="*{chargesName}被绑定到您的内部对象/豆 th:object="${entSetCharges}。这意味着您正在搜索对象内不存在或为空的chargesName字段entSetCharges。
th:field="*{chargesName}
th:object="${entSetCharges}
chargesName
entSetCharges
解:
也许将您th:field="*{chargesName}"的${savedcharges.chargesName}表达式更改为访问对象的字段。
th:field="*{chargesName}"
${savedcharges.chargesName}
尝试respondResult.addObject("entSetCharges",new EntSetCharges());在返回行上方添加。您的视图 不会 自动为您创建此对象。
respondResult.addObject("entSetCharges",new EntSetCharges());