我正在尝试设置单个 CRUD 控制器和相关视图 (JSP) 来处理同一超类的多个子类。每个子类都有一个控制器/视图会导致大量复制/粘贴代码。我的第一个倾向是使用反射。
从另一个页面,用户单击一个链接,该链接确定了操作和要使用的正确子类。因此,在我的控制器中,我将让服务返回正确类型的实例化,然后对于视图,我想显示和编辑所有字段名称和值。
以下是我迄今为止的新行动:
// controller new action code
SubType sub = service.give_me_type(x);
List<Field> fields = new ArrayList<Field>();
fields.addAll(Arrays.asList(sub.getClass().getSuperclass().getDeclaredFields()));
fields.addAll(Arrays.asList(sub.getClass().getDeclaredFields()));
return new ModelAndView("/sub/form")
.addObject("fields", fields);
// view form.jsp
<form:form method="post" commandName="sub" cssClass="left">
<c:choose>
<c:when test="${not empty fields}">
<table>
<c:forEach items="${fields}" var="field">
<tr>
<td>${field.name}</td>
<td>value here</td>
</tr>
</c:forEach>
</table>
</c:when>
<c:otherwise>
...
我意识到将字段放在列表中无助于将对象连接到视图,但我不确定接下来要尝试什么。有任何想法吗?谢谢。
编辑:我正在使用 Spring MVC
编辑:我正在考虑不尝试将对象与视图连接起来。将编辑/更新操作视为一个有趣的案例,在编辑时,我将从我的对象加载我的列表,然后将其显示在视图中;在创建时,我将从用户在视图中输入的列表中找到的值设置对象中的值。那会是下降的解决方案吗?