我正在尝试验证表单字段集的输入值,并在发生无效输入时使Thymeleaf显示一些错误消息。但不知何故,以下Thymeleaf命令从未以正确的方式得到解决:
<p th:if="${#fields.hasErrors('itemId')}" th:errors="{*all}">Name Error</p>
关于我的环境的更多信息,我想不会有什么坏处:
根据Spring GS指南“验证表单输入”,我实现了相关的控制器方法,如下所示:
控制器:
[...]
@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...
}
当我向控制器提交无效的表单输入时,它会根据需要运行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>
所以我有两个问题:
>
显然:如何显示错误消息?
我真的很想更深入地进行调试,但不幸的是,我不知道如何调试Thymeleaf和(Java)MVC(使用STS)。我只想把所有东西的详细日志记录进去<但是,也就是说,我如何跟踪像#字段这样的Thymeleaf变量的当前/最终值。hasErrors()?
非常感谢您的努力!
你的*在错误的地方
编辑
<代码>
好的,组合模型。清除();和模型。addAttribute(“request”,new SomeRequest());这就是原因。
我不太清楚Thymeleaf引擎在返回语句之后被调用,因此它只能访问新的空请求对象,该对象没有无效属性。
另一方面,POST方法内的记录器访问bindingResult对象,因此它可以打印验证信息,而与方法内的模型及其属性发生的情况无关。
如何验证输入,以便当输入为空时弹出消息
假设我有一个非常简单的模型,我想验证它的标题是否为空白。 在服务层上,我执行如下验证(使用Hibernate验证器): 我的资源是: null 编辑 我忘了提到,将方法范围从private更改为public可以使验证工作。
我计划使用API中的 波姆。xml 位置检查。JAVA 位置验证器。JAVA 位置JAVA 机器人。JAVA 一个pp.java 这里的问题是,上的
我缺少一些真正基本的东西(与EAR或EAR配置中的类加载相关)。我不明白,为什么我的JSR303验证和Hibernate验证不是从EAR内部触发的...如果我创建一个新的战争项目,它就会触发。 我正在Weblogic Server10.3上用Maven、JSF2.0、Open-JPA、EJB3.0建立一个新项目。我使用maven原型创建了所有项目。我有一个最终的EAR构建,它的结构如下: 项目名称
我在验证表单时遇到了Thymeleaf问题。我正在尝试创建简单的用户注册表单来学习Spring,不幸的是我被卡住了。 这是我的UserForm类 第一个问题是在initBinder中添加自定义验证器类时 @Not空验证注释的“默认”停止工作。这是预期行为吗? 第二个问题是如何在thymeleaf中显示全局拒绝消息 我的validator类如下所示 和后映射从控制器 作为“默认”验证错误,我可以使用
我有一个名为BigPanel的JPanel子类作为JFrame的内容窗格,在BigPanel对象中有一个嵌套的JPanel子类。单击按钮,嵌套面板应该从一个JPanel子类更改为另一个。嵌套面板没有重置,正确的子类将打印到控制台,但实际面板不会更新包com.grantbroadwater;