2

我正在尝试设置单个 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

编辑:我正在考虑不尝试将对象与视图连接起来。将编辑/更新操作视为一个有趣的案例,在编辑时,我将从我的对象加载我的列表,然后将其显示在视图中;在创建时,我将从用户在视图中输入的列表中找到的值设置对象中的值。那会是下降的解决方案吗?

4

1 回答 1

0

我想建议使用类似 Struts 或 Spring MVC 的东西,因为你会遇到很多问题,与映射到自定义字段类型、检查超超类的字段并授予对它们的访问权限等有关。

http://alasdoo.com/2010/08/binding-data-with-spring-forms/

于 2012-09-06T22:19:48.907 回答