2016-06-21 4 views
1

は、チェックするためのFreeMarkerの文書でフォローラインに出くわした:<element> _has_nextはFreemarkerの従来の構文ですか?より多くの要素がある場合

<#list myList as myVar>...<#if myVar_has_next>...</#if></#list>

を私が知っています「?」ビルトインを呼び出すために、そして、「has_next」、すなわちmyVar?has_nextについてのものである。私は、varと組み込みの間のアンダースコアを使用することに慣れていません。これは従来の構文ですか?

+1

あなたは必ずこのことです:それは

a has next. b has next. c 

編集を作成しmyVar?has_next

public static void main(String[] args) throws IOException, TemplateException { Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); Template template = new Template("test", "<#list myList as myVar>${myVar} <#if myVar?has_next>has next. </#if></#list>", cfg); template.process((Object) Collections.singletonMap("myList", Arrays.asList("a", "b", "c")), new OutputStreamWriter(System.out)); } 

を使用していますが、次のコードは正常に動作します作品ですか?私はタイプミスを疑う。 [The docs](http://freemarker.org/docs/ref_builtins_loop_var.html#ref_builtin_has_next)には、この種の構文は言及されていません。私は個人的にこれが使われているのを見たことがありません – moxn

+1

これは確かに機能します。そうではなく、テンプレートを書いた人は、 "?"に変更した場合、is_directive、parent、js_string、j_string、uncap_first、is_transform、number、is_hash、trim、 iso_local_h_nz、iso_local_m_nz、is_collection、long、default、iso_utc_h_nz、iso_local_ms、is_boolean、last_index_of、c、iso_utc_m_nz、iso_local_m_nz、iso_local_ms_nz、iso_local_ms_nz、iso_local_ms_nz、 is_macro、rtf、iso_utc_nz、upper_case ... – Yiming

答えて

0

これは、文書化されていないの機能です。これは、と思われます。 freemarker.core.IteratorBlockの関連コードは、実際にはmyVar_has_nextが変数の名前に過ぎないことを示しています。しかし、コードでループ変数名(myVar)に_has_next(および_index、fwiw)が追加されていることをチェックするため、Freemarkerはこの変数に値を設定できます。

少なくともFreemarker 2.3.23では、上記のエラーを再現できません。この機能はv2.3.23でhas been deprecated(ddekanyさんのコメント@参照)

+1

啓示してくれてありがとう、moxn。私たちはv2.3.18を使用していますので、?has_nextは存在しません。エラーを説明しています... – Yiming

+2

これは文書化されていない機能ではありません。可能であれば、最新のものにアップグレードしてください。http://freemarker.org/docs/ref_directive_list.html – ddekany

+2

「イテレーションの状態へのアクセス」を参照してください。その5年前のバージョンでは、開発者の時間を無駄にする可能性があります(たとえば、エラーメッセージが役に立たないなど)。 '<#list ...> ... <#if myVar?has_next>の代わりに – ddekany

関連する問題