我正在使用Spring MVC Thymeleaf项目,我在将字段值传递给对象时遇到了问题。有malt
和Country
实体。在malt
表单中,有一个下拉列表,由DB填充-仅限国家名称-没什么大不了的。我可以填充列表,但当我单击“提交”按钮时,有一些错误。下面的代码(仅限相关部分):
麦芽实体:
@Setter
@Getter
@NoArgsConstructor
@Entity
@ToString
@Table(name="malt")
public class Malt extends BaseEntity {
@Column(name="malt_name")
private String maltName;
@ManyToOne(fetch=FetchType.EAGER,
cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name="producer_id")
private Producer producer;
@Column(name="malt_filling")
private int maltFilling;
@Column(name="malt_ebc")
private int maltEbc;
@Column(name="malt_usage")
private String maltUsage;
@ManyToOne(fetch=FetchType.EAGER,
cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name="country_id")
private Country country;
@ManyToMany(mappedBy="malts")
private Set<Batch> batches;
麦芽控制器:
@Controller
@RequestMapping("/malt")
public class MaltController {
@ModelAttribute("countries")
public Collection<Country> populateCountries() {
return countryService.findAll();
}
@RequestMapping("{id}/update")
public String updateMalt(@PathVariable String id, Model model) {
model.addAttribute("malt", maltService.findById(Long.valueOf(id)));
return "malt-form";
}
@PostMapping
public String saveOrUpdate(@ModelAttribute Malt malt) {
Malt savedMalt = maltService.save(malt);
return "redirect:/malt/" + savedMalt.getId() + "/malt-show";
}
麦芽形态:
<div class="form-field-input">
<select class="form-control" th:field="*{id}">
<option value="0">Select country</option>
<option
th:each="country : ${countries}"
th:value="${country.id}"
th:text="${country?.countryName}">
</option>
</select>
</div>
<div class="form-field-submit">
<button class="submit-button" type="submit">Submit</button>
</div>
Malt展示模板:
<div class="wrapper">
<div class="main">
<div class="page-title">
<p th:text="${malt.maltName}">Malt name</p>
</div>
<div class="show">
<div class="form-row">
<div class="form-field-name">
<label>Producer:</label>
</div>
<div class="form-field-input">
<p th:text="${malt.producer.producerName}">Producer name</p>
</div>
</div>
<div class="form-row">
<div class="form-field-name">
<label>Country:</label>
</div>
<div class="form-field-input">
<p th:text="${malt.country.countryName}">Country</p>
</div>
</div>
<div class="form-row">
<div class="form-field-name">
<label>Malt filling:</label>
</div>
<div class="form-field-input">
<p th:text="${malt.maltFilling}">Malt filling</p>
</div>
</div>
<div class="form-row">
<div class="form-field-name">
<label>Malt usage:</label>
</div>
<div class="form-field-input">
<p th:text="${malt.maltUsage}">Malt usage</p>
</div>
</div>
<div class="form-row">
<div class="form-field-name">
<label>Malt EBC:</label>
</div>
<div class="form-field-input">
<p th:text="${malt.maltEbc}">Malt EBC</p>
</div>
</div>
</div>
</div>
</div>
我得到的结束错误:
An error happened during template parsing (template: "class path resource [templates/malt-show.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/malt-show.html]")
.
.
.
Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "malt.country.countryName" (template: "malt-show" - line 44, col 11)
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
... 52 more
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "malt.country.countryName" (template: "malt-show" - line 44, col 11)
at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:290)
.
.
.
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'countryName' cannot be found on null
链接到回购:https://github.com/fangirsan/maruszka-new/tree/malt-form-problem
我尝试了很多不同的方法,但没有结果。
正如例外情况所述,问题是您的malt show表单中的${malt.country.countryName}
。在异常stacktrace的最后一行中,我看到在null上找不到属性或字段“countryName”。这意味着您正试图获取一个空的相关模型属性。您的malt表中的country\u id列可能为空。换言之,国家/地区id未与其他字段一起保存。根据这些假设,您将在保存麦芽糖的表格中发现问题。我检查了此表单,可能问题是<代码>
重要提示:
一些相关模型可以为空,例如,假设您的malt模型中的国家/地区可以为空(取决于应用程序业务逻辑)。如果关系为空,访问模式中的模型关系字段可能会产生上述错误。因此,在这些情况下,您应该在thymeleaf模板中使用null检查。
给定以下代码: 和一个jsp: 如何将在下拉列表中选择的值传递回Spring控制器?目前,当我尝试执行此操作时,得到的请求参数无效。
我明白我需要用硒,但我不知道怎么用。结果始终是单个字符串的列表。理想情况下,我希望返回两个列表:一个带有unix datestamp(option value=“1576627200”),另一个带有“normal”日期(即18/12/2019)的列表。 任何帮助都将不胜感激。
我正在尝试将一个对象(或只是ID)传递给我的控制器,我从下拉列表中选择它。有2个类:产品和类别(产品包含一个外键,这是类别的ID)这是我如何将其加载到: 如您所见,我正在将对象类别传递到我的. jsp中。在那里我显示了用户可以选择的所有类别。 该值应该传递给我的控制器,但我不知道如何传递它。
我在页面上有一个表单,用户可以在其中保存信息,还有一个下拉列表,可以从保存文件的目录中提取这些保存的文件。我想要的是当他们进入该页面时,当他们从下拉框中选择文件名时,它会将文件名放在输入框“CodeDescription”字段中,并将文件信息放在文本区域“Code”中,但我不确定如何解析该文件。下面是我当前的代码。 或者,相反地,我不介意在下拉菜单中选择正确的文件时,它只是在表单字段下面显示输出。
下面给出了一段表示下拉列表的代码。我需要在此下拉列表中选择日期值,由<代码> 以下方法无效 1。)使用“按导入组织选择”选择此值。openqa。硒。支持用户界面。选择 控制台显示: 元素应该是“选择”,但应该是“选项” 2.)首先单击下拉列表以显示要选择的选项,然后单击该选项。 控制台显示: 调试元素缺少可访问的名称:id:类型,标记名:选择,类名:文本输入ng原始ng未触及ng有效ng范围 3.
增加下拉列表在到按钮上,确保 data-activates 属性匹配 <ul> 标签的 id,你可以增加分隔线通过 <li class="divider"></li> 标签。 <!-- Dropdown Trigger --> <a class='dropdown-button btn' href='#' data-activates='dropdown1'>单击我</a> <!-- D