stringtemplate:问题生成html select with pre-selection

时间:2011-03-25 17:28:01

标签: java html stringtemplate

我正在尝试生成一个html选择元素,其中一个选项已预选。我无法想到用stringtemplate做到这一点的方法。

如果user.choice设置为“B”,那么我想打印一个预先选择了选项B的html选择元素。

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)文件,因此具有引用其他模板的模板的解决方案很好。在java中使用stringtemplate 3.2.1。使用“$”分隔符代替现在默认的“&lt;&gt;”使html生成更容易。

1 个答案:

答案 0 :(得分:3)

StringTemplate强制在视图和模型之间进行非常严格的分离。除了布尔值之外,它不支持对conditional operations执行任何操作。我认为引擎真的希望你在传递数据之前完成计算。

我建议将值与实际列表项本身一起存储。假设您已经在“list”对象上存储了“value”和“text”属性(存储在您的集合中),您也可以将选定的布尔属性添加到列表项中。然后您可以按如下方式使用它:

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