gpt4 book ai didi

java - 在 Spring MVC 应用程序中为不同对象类型生成标记

转载 作者:行者123 更新时间:2023-12-01 13:18:43 27 4
gpt4 key购买 nike

在我当前正在进行的项目中,我们有多种对象类型需要不同的呈现方式。

举个例子,假设我们有一个 BankApplication 父类(super class)和两个从该父类(super class)继承的子类,分别为 AccountApplication 和 LoanApplication。它们每个都会在 View 上以不同的方式呈现。

当我们到达 JSP 时,我们有一个上述任何子类型的应用程序列表。我见过很多这样的代码:

<c:set value="${application.class.name}" var="applicationType" />
<c:choose>
<c:when test="${applicationType == 'LoanApplication'}">
<ourLib:displayLoanApplication application="${application}"/>
</c:when>
<c:when test="${applicationType == 'AccountApplication'}">
<ourLib:displayAccountApplication application="${application}"/>
</c:when>
...
</c:choose>

我想知道是否有更好的方法来处理这个问题。我曾考虑过让每个类实现自己的 View ,但这听起来和当前的方法一样丑陋。在类中生成 html 不仅丑陋,而且我还必须处理字符串连接和其他我宁愿避免的东西。

我考虑的另一种选择是加载 jsp/freemarker/velocity 模板并从类中吐出 html。这将允许我将模板与代码分开编辑(好事)。但我还没有看到任何关于此的文档,我什至不确定这是一个好方法。另外,我真的想在简单的 POJO 中包含 jsp/freemarker/velocity 依赖项吗?这听起来有点矫枉过正。

您会建议使用哪些替代方案/模式来根据对象的类型呈现不同的标记?也许我们目前的做法并不像我想象的那么糟糕。

最佳答案

您可以做的是根据简单的类名称包含一个模板。这样您就可以轻松避免到处都有这些选择 block 。

我目前正在使用 Thymeleaf,但我确信“任何”模板引擎都提供类似的包含功能。

这是 Thymeleaf 中的一个示例

<div th:include"entity/__${currentClass.simpleName}__ :: editor">this will be replaced by a template like 'entity/Task' with the fragment 'editor'</div>

您还可以使用 View 模型中的任何可用变量来代替类名来执行此操作。

关于java - 在 Spring MVC 应用程序中为不同对象类型生成标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com