2016-07-14 13 views
1

Struts 2を学習しています。FreeMarkerテンプレートを使用してビューを作成中にエラーが発生しています。私は、Eclipse IDEを使用してTomcatを8でアプリケーションを実行している<@ s.generatorタグとiteratorタグを使用しているときに "Freemarker template error"を取得する

Freemarkerのコードています:

<!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のコンソールトレースログ:私はJSPで同じことをしようとすると

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

奇妙な事は、あります、それは完璧に動作します! (JSPでは、私たちは<s:something>代わりの<@s.something>を使用)

答えて

0

<s:generator>タグはFreeMarkerのテンプレートで使用できるタグ*のようなもの単純ではありません。

いい部分は、実際にはまったく必要ないということです。 <s:iterator>タグなし(<s:generator>)を使用できます。

反復可能なソースを設定し、OGNL式{e1,e2,e3}を使用してリストを作成するには、反復子タグの属性valueを使用します。

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

* FreeMarkerテンプレートで使用できるStruts2タグを知りたいですか? DefaultTagLibrary#getDirectiveClassesメソッドを参照してください。

+1

これは私の最初の投稿stackoverflowでした。私はいつこの問題を解決するのだろうと思っていた。そして早く解決されました。ありがとう。私はあなたも私のためにその参照を提供したことを愛しました。 :) – hvsharma

+0

@hvsharmaようこそ。素晴らしい最初の投稿。 –

+1

FreeMarkerには独自のイテレータディレクティブ( '#list'とその友人)があります... Strutsのベストプラクティスは何か分かりませんが、これは私には非常に奇妙に見えます。 – ddekany

関連する問題