假设我有一个具有标准多态行为的动物列表,例如猫和狗。
为列表中的每个视图显示不同的JSP视图的最佳方法是什么?
<c:forEach var='animal' items='${animals}'>
//show a different template per animal type
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
老实说,出于明显的原因,我不会考虑为每个bean使用#toJSP。
我很想用一个
public interface Template{
public String render()
}
Run Code Online (Sandbox Code Playgroud)
每个动物传入构造函数,但是我不确定这些对象应该在哪里创建。我猜它可以在JSP内以<%%>的方式完成,但是出于某种原因,我在犹豫是否使用此表示法。
所以我最终通过以下方式在 JSP 中使用了可用于 i18n 的“捆绑包”
<fmt:message var="template" key="${animal.class.name}" />
Run Code Online (Sandbox Code Playgroud)
使用template.properties文件
foo.bar.Animal = animal.jsp
foo.bar.Cat = cat.jsp
foo.bar.Dog = dog.jsp
Run Code Online (Sandbox Code Playgroud)
所以最终的解决方案看起来像这样
<c:forEach var='animal' items='${animals}'>
<span>
<c:set var="animal" scope="request" value="${animal}"/>
<fmt:message var="template" key="${animal.class.name}" />
<jsp:include page="${template}" />
</span>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
使用如下所示的模板文件
Hello animal ${animal}!
Hello cat ${animal}!
Hello dog ${animal}!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
878 次 |
| 最近记录: |