我是 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中,但这对我来说似乎很奇怪。
为什么呢?问题是什么?我错过了什么?我该如何解决这个问题?
答案 0 :(得分:0)
几个笔记:
null
放入其中。最好省略整个属性。redirect
不存在),您无论如何都在为您评估它<a href=${redirect}>
元素。这不可能做你想做的事。而不是存在检查的redirect??
,您可以将空字符串传递给属性并使用redirect?has_content
代替,如果属性不存在则返回false,{{1 }或者为空(在null
的情况下,其长度为零)。