シングルクォーテーションとダブルクォーテーションを正しく使わない場合に
よく起こるエラーとしては次のようなものがあります。
- 文字列に変換し忘れていることによるエラー
- クォーテーションのネストによるエラー
例えば、次のような場合にはエラーとなります。
## 文字列に変換し忘れていることによるエラー #set($a = hoge) #set($a = hoge+$dayOfWeek) ## クォーテーションのネストによるエラー 明後日は${Util.getNext("${Util.getNext("${Monday.getToday()}").getToday()}").getToday()} 明後日は${Util.getNext('${Util.getNext('月曜日').getToday()}').getToday()} 1の次は#showString("#nextNumber("1")")
エラーを避けるためには、次のようにします。
##""もしくは''を使って文字列に変換する #set($a = "hoge") #set($a = "hoge+$dayOfWeek") ##シングルクォーテーション同士、ダブルクォーテーション同士のネストを避ける 明後日は${Util.getNext("${Util.getNext(${Monday.getToday()}).getToday()}").getToday()} 明後日は${Util.getNext("${Util.getNext('月曜日').getToday()}").getToday()} 1の次は#showString("#nextNumber('1')")
なお、変数・マクロ・メソッドは次のように定義
context.put("dayOfWeek", "月曜日"); context.put("Monday", new Day("月曜日")); context.put("Util", new Day(""));
#macro(nextNumber $number) #if($number == "1")2 #end #end #macro(showString $number) $number #end
public class Day { String today; public Day(String string) { today=string; } public String getToday(){ return today; } public static Day getNext(String day){ Day tomorrow=new Day(""); switch (day){ case "月曜日":tomorrow= new Day("火曜日");break; case "火曜日":tomorrow= new Day("水曜日");break; case "水曜日":tomorrow= new Day("木曜日");break; case "木曜日":tomorrow= new Day("金曜日");break; case "金曜日":tomorrow= new Day("土曜日");break; case "土曜日":tomorrow= new Day("日曜日");break; case "日曜日":tomorrow= new Day("月曜日");break; } return tomorrow; } }