2011-01-05 9 views
4

私はIntegersをキーにして多数のハッシュテーブルを持っていますが、私はFreemarkerテンプレートで繰り返し処理できるようにしたいと考えています。Freemarker Hashtable <Integer、String>、キーで反復する

私はFreemarker iterating over hashmap keysから例を試してみました:


<#list user.props() as prop> 
    ${prop} = ${user.get(prop)} 
</#list> 

それはおそらくキーとして文字列を使用していますが、それは整数としませんでした。私はまた、具体的な値で私のハッシュテーブルから値を取得することもできません。私が持っているものは:

Hashtalbe ht = new Hashtable(); 
ht.put(1, "hello"); 
datamodel.put("devices", ht);

(テンプレートに渡されたハッシュマップです)です。テンプレートで

私は、次の手順を実行します。


<#if devices??> 
<#list devices?keys as prop> 
    <p>${prop}</p> 
    <p>${devices.get(1)}</p> 

          
  
OR
<p>${devices.get(key)}</p>
OR
<p>${devices[key]}</p>
OR
<p>${devices[1]}</p> </#list> <#else> <p> no devices</p> </#if>

しかし、それのどれも機能しません。私を助けてくれますか?

PS。私はハッシュテーブルをからテンプレートに渡すように変換しましたが、これは少しの回避策のようです。

敬具、私の足跡をたどることがあなたの人々のための Timofey

答えて

7

。 FreeMarkerは、パラメータとしてHashtableを使用することはできません。だから私は、INTIこれらのハッシュテーブルのバージョンを作成終わったと、私は私のハッシュテーブルのキーとして数字を持っていたことから、私は私のテンプレートで次の操作を行うことができました:


<#list 1..100 as prop> 
    <#if hashtable[prop?string]??> 
     <option value='${prop}'<#if prop==selected> selected='selected'</#if>>${hashtable[prop?string]}</option> 
    <#else><#break> 
    </#if> 
</#list> 

幸運と力はあなたと一緒かもしれ:)

+2

実際問題は、FreeMarkerはString型のキーでハッシュしか処理できないということです。 – idrosid

+0

これにはもっと良い解決策があります( '?api'を使います)。 [このFAQのエントリ](http://freemarker.org/docs/app_faq.html#faq_nonstring_keys)を参照してください。 – ddekany

1

これは、FTLのハッシュタイプがJavaのMapおよびonly supports string keysと似ていないという古い問題です。しかし、2.3.22以降では、someMap?api.get(someNonStringKey)を使用してそのように動作させることができます。有効にするには何らかの設定が必要ですが、既存のアプリケーションを破壊するものはありません。 this answerまたはthis FAQ entryを参照してください。

関連する問題