为什么在将空值放入Spring MVC模型对象时会出现此错误? java.lang.IllegalArgumentException:属性值不能为null

时间:2016-05-11 12:54:49

标签: spring spring-mvc freemarker

我是 FreeMarker 的新手,我正在开发一个使用 FreeMarker 作为模板引擎的 Spring MVC 应用程序。

所以我有以下问题尝试将空值放入模型并尝试将其评估到我的 FreeMarker 页面。

所以我有以下控制器方法:

@RequestMapping(value = "/sso/login", method = RequestMethod.POST)
public String loginPost(HttpServletResponse response, @ModelAttribute DoLoginCommand command, 
        @ModelAttribute("redirect") String redirect, Model model) {

    ...................................................................
    ...................................................................
    ...................................................................

    if (statusPasswordView.getDataWarning() != null && statusPasswordView.getDataWarning().before(new Date())) {
        model.addAttribute(MA_EXPIRE_DATE, dataScadenza);

        if(redirect.equals("")) {
            model.addAttribute("redirect", null);
        }
        else {
            model.addAttribute("redirect", redirect);
        }

        return "/sso/password-toexpire";
    }
    ...................................................................
    ...................................................................
    ...................................................................
}

因此,正如您在前面的代码段中所看到的, loginPost()方法接收此字符串 @ModelAttribute(&#34; redirect&#34;)字符串重定向<作为参数/ strong>(这是我的控制器类的 @SessionAttributes ,但我认为现在这并不重要。)

如果重定向变量的值是一个空字符串(&#34;&#34;字符串),我在模型中添加一个名为重定向的属性 null 作为值。 否则,如果重定向字符串不是空字符串,我将其值作为之前重定向模型属性的值。

然后进入我的 FreeMarker 页面(名为 password-toexpire.ftl ),我这样做:

    <#if redirect??>
        <a href="<@spring.url '/profilo/home' />" class="btn btn-block btn-success submit-btn">Continua la navigazione</a>
    <#else>
        <a href="${redirect}" class="btn btn-block btn-success submit-btn">Continua la navigazione</a>
    </#if>

因此,在此页面中,我正在检查重定向属性 null 是否将不同的元素呈现到我的最终HTML中。

唯一的问题是,当我的 password-toexpire.ftl 页面返回时,我会在Eclipse堆栈跟踪中获取错误消息:

14:48:44,092 ERROR [it.mycompany.myprogjet.mypackage.base.SsumExceptionHandlerControllerAdvise] (http-localhost/127.0.0.1:8080-1) Attribute value must not be null: java.lang.IllegalArgumentException: Attribute value must not be null

所以在Spring中我似乎不能将 null 属性放入模型 onject中,但这对我来说似乎很奇怪。

为什么呢?问题是什么?我错过了什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

几个笔记:

  • 如果您希望模型属性为空,则无需手动将null放入其中。最好省略整个属性。
  • 在您的模板中,您正在检查该属性是否存在(非空) - 但在您的其他分支中(如果您已确定redirect不存在),您无论如何都在为您评估它<a href=${redirect}>元素。这不可能做你想做的事。

而不是存在检查的redirect??,您可以将空字符串传递给属性并使用redirect?has_content代替,如果属性不存在则返回false,{{1 }或者为空(在null的情况下,其长度为零)。