2016-07-14 4 views
1

Ich lerne Struts 2. Beim Erstellen von Ansichten mit FreeMarker Vorlage, erhalte ich einen Fehler. Ich bin mit Eclipse-IDE und Ausführen der Anwendung in Tomcat 8.Erhalte "Freemarker Vorlage Fehler" während der Verwendung von <@ s.generator und Iterator-Tags

Freemarker-Code:

<!DOCTYPE html> 
    <html> 
    <head> 
     <meta charset="UTF-8"> 
    <title>Insert title here</title> 
    </head> 
    <body> 
     <h1>Sample...(FreeMarker)</h1><br><br>  
     <div> 
      <@s.generator separator="," val="%{'15,20,30,40,50'}"> 
       Last entered protein Values -:<br> 
       <@s.iterator> 
        <@s.property /><br> 
       </@s.iterator> 
      </@s.generator> 
     </div>  
    </body> 
    </html> 

Eclipse-Konsole Trace Log:

> Jul 14, 2016 8:19:02 PM 
    > com.opensymphony.xwork2.util.logging.jdk.JdkLogger error SEVERE: 
    > Exception occurred during processing request: The following has 
    > evaluated to null or missing: 
    > ==> s.generator [in template "WEB-INF/content/enter-protein.ftl" at line 10, column 11] 
    > 
    > ---- Tip: It's the step after the last dot that caused this error, not those before it. 
    > ---- Tip: If the failing expression is known to be legally refer to something that's null or missing, either specify a default value like 
    > myOptionalVar!myDefault, or use <#if 
    > myOptionalVar??>when-present<#else>when-missing</#if>. (These only 
    > cover the last step of the expression; to cover the whole expression, 
    > use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? 
    > ---- 
    > 
    > ---- FTL stack trace ("~" means nesting-related): 
    > - Failed at: @s.generator separator="," val="%{'15... [in template "WEB-INF/content/enter-protein.ftl" at line 16, column 9] 
    > ---- FreeMarker template error: The following has evaluated to null or missing: 
    > ==> s.generator [in template "WEB-INF/content/enter-protein.ftl" at line 16, column 11] 
    > 
    > ---- Tip: It's the step after the last dot that caused this error, not those before it. 
    > ---- Tip: If the failing expression is known to be legally refer to something that's null or missing, either specify a default value like 
    > myOptionalVar!myDefault, or use <#if 
    > myOptionalVar??>when-present<#else>when-missing</#if>. (These only 
    > cover the last step of the expression; to cover the whole expression, 
    > use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? 
    > ---- 
    > 
    > ---- FTL stack trace ("~" means nesting-related): 
    > - Failed at: @s.generator separator="," val="%{'15... [in template "WEB-INF/content/enter-protein.ftl" at line 16, column 9] 
    > ---- 
    > 
    > Java stack trace (for programmers): 
    > ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]  at 
    > freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:116) 
    > at freemarker.core.UnifiedCall.accept(UnifiedCall.java:112)  at 
    > freemarker.core.Environment.visit(Environment.java:312) at 
    > freemarker.core.MixedContent.accept(MixedContent.java:62)  at 
    > freemarker.core.Environment.visit(Environment.java:312) at 
    > freemarker.core.Environment.process(Environment.java:290)  at 
    > freemarker.template.Template.process(Template.java:312) at 
    > org.apache.struts2.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:223) 
    > at 
    > org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191) at 
. 
. 
. 
. 
    ........................ So on........... 

Seltsame ist, wenn ich versuche, das gleiche in JSP funktioniert es einwandfrei! (In JSP verwenden wir <s:something> statt <@s.something>)

Antwort

0

Der <s:generator> Tag nicht diese Art von einem Tag * einfach ist, die in Freemarker-Vorlage verwendet werden können.

Der gute Teil ist: Es wird überhaupt nicht benötigt. Sie können <s:iterator> Tag ohne <s:generator> verwenden.

Verwenden Sie value Attribut des Iterator-Tags, um iterierbare Quelle und OGNL-Ausdruck {e1,e2,e3} festzulegen, um eine Liste zu erstellen.

<@s.iterator value="{15,20,30,40,50}"> 
    <@s.property /><br> 
</@s.iterator> 

* Fragen, welche Struts2-Tags können Sie in FreeMarker Vorlage verwenden? Siehe DefaultTagLibrary#getDirectiveClasses Methode.

+1

Das war mein erster Beitrag auf Stackoverflow. Ich habe mich gefragt, wann ich das gelöst bekommen würde. Und es wurde so früh gelöst. Vielen Dank. Ich habe es geliebt, dass du mir diese Referenz gegeben hast. :) – hvsharma

+0

@hvsharma Willkommen bei SO. Toller erster Beitrag. –

+1

FreeMarker hat seine eigenen Iterator-Direktiven ('# list' und seine Freunde) ... Ich weiß nicht, was die Best Practices von Struts sind, aber das sieht mir sehr komisch aus. – ddekany

Verwandte Themen