FreeMarker - это типичный «динамический язык», который означает, что рефакторинг / изменение трудны. Шаблоны не объявляют, что они ожидают быть в модели данных. Кроме того, когда шаблон пытается прочитать значение из модели данных, например, с помощью ${foo.bar}
, это может означать foo.get("bar")
или foo.getBar()
или что-либо, что делает возможным использование ObjectWrapper
, и это решается только тогда, когда казнены. Конечно, вам придется вернуться к старому доброму поиску и замене и большому количеству тестирования (хороший набор тестов необходим ...), если вы что-то измените. И, конечно же, вы можете посмотреть на место в программе, где строится модель данных, и посмотреть, что в нее заложено. Или сбросьте модель данных как-нибудь во время выполнения.