2

我正在尝试生成一个预选了一个选项的 html 选择元素。我想不出用字符串模板来做到这一点的方法。

如果 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 中似乎没有像传递值的比较操作那样可用。我错过了一些明显的东西吗?

我正在使用字符串模板组 (.stg) 文件,因此具有引用其他模板的模板的解决方案很好。在 java 中使用 stringtemplate 3.2.1。使用 "$" 分隔符而不是现在默认的 "<>" 来简化 html 生成。

4

1 回答 1

3

StringTemplate 在视图和模型之间强制执行非常严格的分离。它不支持对布尔值以外的任何内容进行条件操作。我认为引擎真的希望您在传递数据以进行渲染之前完成计算。

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

<select>
$list:{ l |
<option value=$l.value$ $if(l.selected)$selected="selected"$endif$>$l.text$</option>
}$
</select>
于 2011-03-26T06:03:46.323 回答