gpt4 book ai didi

spring - 在 Freemarker 模板中显示 Spring MVC 验证错误

转载 作者:行者123 更新时间:2023-12-01 12:59:21 24 4
gpt4 key购买 nike

如果 Controller 返回绑定(bind)错误,我会尝试在我的 freemarker 模板中显示全局验证错误列表。我可以显示与字段关联的错误,但我想检测特定 bean 中何时发生错误并在页面顶部显示一条消息。我试过使用下面的示例,它不产生任何输出:

<@spring.bind "webPage" />
....
<#if spring.status.error>
There were problems with the data you entered:
<ul>
<#list spring.status.errorMessages as error>
<li>${error?html}</li>
</#list>
</ul>
</#if>

下面的行总是返回 0,尽管提交的表单有错误:

${spring.status.errorMessages?size}

我的 Controller 代码如下:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute("webPage") @Valid WebPage page, BindingResult result, Model model) {
if (!model.containsAttribute("site")) {
throw new IllegalArgumentException("Model must contain site attribute.");
}
Site site = (Site) model.asMap().get("site");
if (!result.hasErrors() && !page.isNew()) {
this.pageService.save(page, site);
} else if (!result.hasErrors() && page.isNew()) {
this.pageService.create(page, site);
}
return createMav(result);
}

createMav 方法如下:

public ModelAndView createMav(BindingResult result) {
ModelAndView mav = new ModelAndView();
mav.setViewName(getPrimaryControllerView());
mav.addAllObjects(result.getModel());
return mav;
}

有没有办法使用 Freemarker + Spring MVC 来实现这一点?

最佳答案

我找到了一种使用标准 MVC JSP 标记库执行此操作的迂回方法。我将其提供给 Freemarker:

<#assign form=JspTaglibs["http://www.springframework.org/tags/form"] />

然后我使用以下宏来显示全局错误消息:

<#macro formErrors>
<#assign formErrors><@form.errors path="*" /></#assign>
<#if formErrors?has_content>
<div id="errors">
<@spring.message "admin.error.globalMessage" />
</div>
</#if>
</#macro>

我只是将以下行放在我希望出现此错误消息的地方(这必须包含在提交给 Controller 的表单元素中):

<@form.form method="POST" commandName="webPage">

<@formErrors />
....
</@form.form>

关于spring - 在 Freemarker 模板中显示 Spring MVC 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7556733/

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