我正在尝试生成一个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生成更容易。
答案 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>