2011-09-26 47 views
3

如果控制器返回綁定錯誤,我想在自由標記模板中顯示全局驗證錯誤列表。我可以顯示與某個字段相關的錯誤,但是我想要檢測特定bean中發生錯誤的時間,並在頁面頂部顯示一條消息。我用下面這不產生輸出的例子嘗試:在Freemarker模板中顯示Spring MVC驗證錯誤

<@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} 

我的控制器代碼如下:

@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實現這一點?

回答

3

我找到了一個使用標準MVC JSP taglib做到這一點的迂迴路線。我做這提供給了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> 

我只是將下面一行在以往任何時候我想出現此錯誤信息(這必須被包含在提交給控制器)​​的形式元素中:

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

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

可以編寫如下:

<#if spring.status.error> 
<ul> 
    <#list spring.status.errors.globalErrors as error> 
    <li>${error.defaultMessage}</li> 
    </#list> 
</ul> 
</#if> 

更多信息在BindStatusErrors類。

1

嘗試是這樣的:

<@spring.bind "webPage" /> 
<#if (spring.status.errors.allErrors?size > 0) > 
    <@spring.message "my.global.error.code"/> 
</#if>