【问题标题】:Why I obtain this error when I put a null value into the Spring MVC model object? java.lang.IllegalArgumentException: Attribute value must not be null为什么当我将空值放入 Spring MVC 模型对象时会出现此错误? java.lang.IllegalArgumentException:属性值不能为空
【发布时间】:2016-05-11 12:54:49
【问题描述】:

我是 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";
    }
    ...................................................................
    ...................................................................
    ...................................................................
}

所以,在前面的代码 sn-p 中可以看到,loginPost() 方法接收这个 String @ModelAttribute("redirect") String redirect 作为参数(这是我的控制器类的 @SessionAttributes,但我认为现在这并不重要)。

如果 redirect 变量的值是一个空字符串("" 字符串),我在模型中放入一个名为 redirect 且具有 null 的属性强> 作为价值。 否则,如果 redirect 字符串不是空字符串,我将其值作为前一个 redirect 模型属性的值。

然后进入我的 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>

因此,在此页面中,我正在检查 redirect 属性是否为 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 属性放入 model 项目中,但这对我来说似乎很奇怪。

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

【问题讨论】:

    标签: spring spring-mvc freemarker


    【解决方案1】:

    几个笔记:

    • 如果希望模型属性为空,则无需手动将null 放入其中。最好省略整个属性。
    • 在您的模板中,您正在检查该属性是否存在(非空) - 但在您的 else 分支中(如果您已确定 redirect 不存在)您正在为您的 &lt;a href=${redirect}&gt; 元素评估它.这不太可能满足您的需求。

    也可以代替redirect?? 进行存在性检查,您可以将空字符串传递给属性并改用redirect?has_content,如果属性不存在、为null 或为空,则返回false (对于String,它的长度为零)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多