stringtemplate: проблема создания HTML-выбора с предварительным выбором - PullRequest
2 голосов
/ 25 марта 2011

Я пытаюсь сгенерировать HTML-элемент select с одним предварительно выбранным параметром. Я не могу придумать, как это сделать с помощью stringtemplate.

Если для user.choice задано значение «B», я хочу напечатать элемент выбора HTML с предварительно выбранной опцией B.

user.choice = "B";
StringTemplate myPage = group.getInstanceOf(....);
myPage.setAttribute("user", user);

при печати шаблона должно появиться:

<select>
    <option value="A"              >A Selected</option>
    <option value="B"  SELECTED    >B Selected</option>
    <option value="C"              >C Selected</option>
    <option value="D"              >D Selected</option>
</select>

Может кто-нибудь сказать мне, как написать шаблон для этого. Количество вариантов (A, B ...) является фиксированным (известно на момент написания шаблона).

Это довольно распространенное требование при создании html-страниц для веб-сайтов. Но ничего похожего на операцию сравнения для переданных значений в stringtemplate, похоже, нет. Я что-то упускаю из виду?

Я использую файлы группы stringtemplate (.stg), поэтому решения, которые имеют шаблоны, ссылающиеся на другие шаблоны, подходят. Использование stringtemplate 3.2.1 в Java. Использование разделителя "$" вместо используемого по умолчанию "<>" для упрощения создания html.

1 Ответ

3 голосов
/ 26 марта 2011

StringTemplate обеспечивает очень строгое разделение вашего вида и модели. Он не поддерживает выполнение условных операций для чего-либо, кроме логических значений. Я думаю, что движок действительно хочет, чтобы вы выполнили вычисления, прежде чем передать данные для визуализации.

Я бы посоветовал сохранить значение с самими фактическими элементами списка. Скажем, у вас уже есть свойство «value» и «text» в объекте «list» (которые хранятся в вашей коллекции), вы также можете добавить выбранное логическое свойство в элемент списка. Затем вы можете использовать его следующим образом:

<select>
$list:{ l |
<option value=$l.value$ $if(l.selected)$selected="selected"$endif$>$l.text$</option>
}$
</select>
...