【问题标题】:stringtemplate: problem generating html select with pre-selectionstringtemplate:使用预选生成 html 选择的问题
【发布时间】:2011-03-26 14:03:46
【问题描述】:

我正在尝试生成一个预选了一个选项的 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 中似乎没有像传递值的比较操作那样可用。我错过了什么明显的东西吗?

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

【问题讨论】:

    标签: java html stringtemplate


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个相关问题:stackoverflow.com/questions/4195828/…
    • @ian-robison 我很欣赏严格分离是 stringtemplate 更好的部分。用例看起来很常见,所以我认为可能有一种既定的技术/模式,似乎没有。
    • 我相信有一个既定的模式,它会在将模型与模板混合之前让模型达到你喜欢的方式。也许您正在寻找规则的既定例外? :)
    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多