2016-05-11 9 views
-1

Ich bin ziemlich neu mit Freemarker und ich arbeite an einem Spring MVC Anwendung, die Freemarker als Template-Engine verwenden.Warum erhalte ich diesen Fehler, wenn ich einen Null-Wert in das Spring MVC-Modellobjekt einfüge? java.lang.IllegalArgumentException: Wert Attribut darf nicht null sein

So habe ich das folgende Problem tryng, um einen Nullwert in das Modell und versuchen, es in meine FreeMarker Seite auszuwerten.

So habe ich die folgende Controller-Methode:

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

So, wie Sie im vorherigen Codeausschnitt sehen, die loginPost() Methode erhält als Parameter dieses String @ModelAttribute ("Umleitung") String redirect (das ist ein @SessionAttributes meiner Controller-Klasse, aber ich denke, dass das jetzt nicht wichtig ist).

Wenn der Wert der Variable umlenken ist eine leere Zeichenfolge (die „“ string) I im Modell legte ein attribite null umleiten genannt als Wert. Sonst, wenn die Umleitung Zeichenfolge ist nicht die leere Zeichenfolge, die ich Wert als Wert der vorherigen Umleitung Modellattribut.

Dann in meine Freemarker Seite (mit dem Namen Passwort-toexpire.ftl) ich:

<#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> 

Also, auf dieser Seite, ich bin Überprüfung, ob die Umleitung Attribut ist null oder kein anderes Element in mein endgültiges HTML zu rendern.

Das einzige Problem ist, dass, wenn meine Passwort-toexpire.ftl Seite zurückgegeben I thi Fehlermeldung in die Eclipse-Stack-Trace erhalten:

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 

So scheint es, dass im Frühjahr kann ich nicht setzen Null Attribut in die Modell onject, aber es scheint mir seltsam.

Warum? Was ist das Problem? Was vermisse ich? Wie kann ich dieses Problem lösen?

Antwort

0

Paar von Noten:

  • Wenn Sie ein Modell Attribut leer sein wollen, müssen Sie nicht manuell brauchen setzen null drin. Es ist besser, das ganze Attribut wegzulassen.
  • In Ihrer Vorlage überprüfen Sie, ob das Attribut existiert (ist nicht null) - aber in Ihrer else Zweigstelle (wenn Sie festgestellt haben, dass redirect nicht existiert), bewerten Sie es trotzdem für Ihr <a href=${redirect}> Element. Dies ist wahrscheinlich nicht das, was Sie wollen.

auch anstelle des redirect?? für die Existenzprüfung, können Sie die leere Zeichenkette zusammen mit dem Attribut passieren könnte und verwenden redirect?has_content statt, die falsch zurück, wenn das Attribut nicht existiert, ist null oder leer ist (in der Fall eines String, ist seine Länge Null).