ベロシティテンプレート内の名前でマップを参照
質問
かなり確信してこれに対する簡単な答えがあるが、ちょうど右のVTL構文を見つけることができません。
私の文脈では、私は他のマップが含まれている地図を渡しています。私は名前でこれらの内部のマップを参照し、私のテンプレート内でそれらを割り当てるしたいと思います。内側地図アプリの異なる部分によって構成され、かつ、コンテキストに追加される
例として
public static void main( String[] args )
throws Exception
{
VelocityEngine ve = new VelocityEngine();
ve.init();
Template t = ve.getTemplate( "test.vm" );
VelocityContext context = new VelocityContext();
Map<String,Map<String,String>> messageData = new HashMap<String, Map<String,String>>();
Map<String,String> data_map = new HashMap<String,String>();
data_map.put("data_1","1234");
data_map.put("a_date", "31-Dec-2009");
messageData.put("inner_map", data_map);
context.put("msgData", messageData);
StringWriter writer = new StringWriter();
t.merge( context, writer );
System.out.println( writer.toString() );
}
テンプレート - test.vm
#set ($in_map = $msgData.get($inner_map) )
data:
$in_map.data_1
$in_map.a_date
解決 2
与えられた答えは私のために動作しませんでしたが、私は別の方法で問題を考えていますでした。私は、文字列に基づいてデータのサブセクションを検索し、マップのリストを返すことができます方法を作成することによって、これを解決しました。
#set( $data = $confirmData.getCollection("MSG_DATA").get(0) )
あなたの基礎となるデータは、XML文書である場合には、XPathに渡し、メソッドがのtagName tagValuesのマップを返すことができますように、これはでも、動作します。これは、多くの柔軟性を提供しています。
#set( $data = $confirmData.getCollection("//Message/header[sendFrom='xxx']").get(0) )
他のヒント
試してみてください
${in_map.get("data_1")}
または
${in_map.get("a_date")}
所属していません StackOverflow