Как разветвить три разных случая в зависимости от всех трех состояний, которые может иметь логическое свойство? Код Java для этого выглядит просто:
public class Foo {
public Boolean getBool() { return null /* this would be dynamic in RL */; }
}
// somewhere in the servlet code:
if (foo.getBool() == null) {
resp.getWriter().print("not yet set");
} else if (foo.getBool()) {
resp.getWriter().print("set to TRUE");
} else {
resp.getWriter().print("set to FALSE");
}
Кажется, что Velocity терпит здесь эпический провал, поскольку в спецификации нет литерала null, а проверки на равенство boolean/not-null несколько взаимозаменяемы ради простоты. Конечно, есть два решения, чтобы избежать этой дилеммы (см. ниже), но есть ли какой-нибудь простой/более чистый способ?
просто добавьте дополнительный геттер в класс Foo, например:
boolean isBoolSet() {return getBool() != null; }
и тогда код VTL будет таким:
#if(!$foo.boolSet)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end
получить какое-то нулевое значение, например,
Объект getTheNull() {return null; }
и тогда VTL будет выглядеть так:
#if($foo.bool == $foo.theNull)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end