gpt4 book ai didi

java - Thymeleaf 验证 : . hasErrors 不触发

转载 作者:行者123 更新时间:2023-11-29 03:07:11 26 4
gpt4 key购买 nike

我正在尝试验证表单字段集的输入值,并使 Thymeleaf 在出现无效输入时显示一些错误消息。但不知何故,以下 Thymeleaf 命令永远无法以正确的方式解析:

<p th:if="${#fields.hasErrors('itemId')}" th:errors="{*all}">Name Error</p>

我想关于我的环境的更多信息不会造成伤害:

基于Spring GS-Guide "Validating Form Input"我实现了相关的controller方法如下:

Controller :

[...]
@RequestMapping(value = "/explorer/optaResultRequest", method = RequestMethod.POST)
public String optaResultRequestPOST(
HttpServletRequest httpRequest,
ModelMap model,
@ModelAttribute("request") @Valid SomeRequest userRequest,
final BindingResult bindingResult)
{

/* To destroy existing "request" attribute: */
model.clear();

/* Check for invalid values: */
if (bindingResult.hasErrors())
{
for (int i = 0; i < bindingResult.getAllErrors().size(); i++)
{
log.info(bindingResult.getAllErrors().get(i).getObjectName());
log.info(bindingResult.getAllErrors().get(i).getCode());
log.info(bindingResult.getAllErrors().get(i).toString());
}

/* Refill the model with a new, empty "request" attribute. */
model.addAttribute("currRequest", userRequest);
model.addAttribute("request", new SomeRequest());

return "mypage";
}

// Process valid request...
}

当我向 Controller 提交无效的表单输入时,它会根据需要遇到 if 子句,这样会打印 log.infos 并再次返回相同的页面 (mypage) - 但提到的 Thymeleaf 命令 不会展示任何东西

控制台:

 2015-07-22 16:22:28.151  INFO 6896 --- [nio-8080-exec-6] Controller   :
request
2015-07-22 16:22:28.151 INFO 6896 --- [nio-8080-exec-6] Controller :
NotEmpty
2015-07-22 16:22:28.151 INFO 6896 --- [nio-8080-exec-6] Controller :
Field error in object 'request' on field 'itemId':
rejected value [];
codes [NotEmpty.request.itemId,NotEmpty.itemId,NotEmpty.java.lang.String,NotEmpty];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable:
codes [request.itemId,itemId];
arguments [];
default message [itemId]];
default message [may not be empty]

mypage.html 看起来像这样(简化和缩短的原因):

mypage.html

<form action="#" th:object="${request}" th:action="@{/mypage}" method="post">
<fieldset>
<div>
<!-- ItemId -->

<div>
<label>ItemId</label>
</div>

<div>
<input type="text" th:field="*{itemId}" th:placeholder=
"${currRequest.itemId}" />
</div>

<p th:if="${#fields.hasErrors('itemId')}" th:errors="{*all}">Name Error</p>
</div>
</fieldset>
</form>

所以我有两个问题:

  1. 显然:如何显示错误信息?

  2. 我真的很想深入调试 - 但不幸的是,我不知道如何调试 Thymeleaf 和 (Java) MVC(使用 STS)。我只设法包含所有内容的详细日志记录。
    但是,即我如何跟踪像 #fields.hasErrors() 这样的 Thymeleaf 变量的当前/最终值?

非常感谢您的努力!

最佳答案

好吧,model.clear();model.addAttribute("request", new SomeRequest()); 的组合就是原因。

我不太清楚 Thymeleaf 引擎在 return 语句之后被调用,所以它只能访问新的空请求对象,它没有无效的属性。

另一方面,POST 方法内的记录器访问 bindingResult 对象,因此它可以独立于模型及其属性在方法内发生的情况打印验证信息。

关于java - Thymeleaf 验证 : . hasErrors 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31567598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com