Java CRUD接口对多个子类型使用一个控制器
我试图设置一个CRUD控制器和相关的JSP视图来处理同一超类的几个子类。为每个子类拥有一个控制器/视图会导致大量的复制/粘贴代码。我的第一个倾向是使用反射 在另一个页面中,用户单击一个链接,该链接确定操作和要使用的适当子类。因此,在我的控制器中,我将让服务返回正确类型的实例化,然后对于视图,我希望显示和编辑所有字段名和值 以下是我到目前为止的新行动:Java CRUD接口对多个子类型使用一个控制器,java,jsp,reflection,crud,Java,Jsp,Reflection,Crud,我试图设置一个CRUD控制器和相关的JSP视图来处理同一超类的几个子类。为每个子类拥有一个控制器/视图会导致大量的复制/粘贴代码。我的第一个倾向是使用反射 在另一个页面中,用户单击一个链接,该链接确定操作和要使用的适当子类。因此,在我的控制器中,我将让服务返回正确类型的实例化,然后对于视图,我希望显示和编辑所有字段名和值 以下是我到目前为止的新行动: // controller new action code SubType sub = service.give_me_type(x); List
// 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>
...
我意识到将字段放在列表中无助于将对象连接到视图,但我不确定下一步要尝试什么。有什么想法吗?谢谢
编辑:我正在使用SpringMVC
编辑:我正在考虑不尝试将对象与视图连接起来。将编辑/更新操作视为一个有趣的案例,在编辑时,我将从我的对象加载列表,然后在视图中显示该列表;在创建时,我将根据用户在视图中输入的列表中的值设置对象中的值。这是一种下降解决方案吗?我建议您使用Struts或Spring MVC之类的工具,因为您会遇到很多问题,比如映射到自定义字段类型、检查超级类的字段以及授予对它们的访问权限等
我想建议您使用Struts或SpringMVC之类的工具,因为您会遇到很多问题,比如映射到自定义字段类型、检查超级类的字段以及授予对它们的访问权限等等
我应该提到我正在使用SpringMVC;很抱歉。我要把这个问题提出来。@Mickey你为什么这么难?例如,为什么不使用表单绑定呢?在那个教程中,我没有看到Student的子类在哪里。我试图让控制器及其视图处理基类的所有派生类,并避免为每个子类创建控制器/视图;很抱歉。我要把这个问题提出来。@Mickey你为什么这么难?例如,为什么不使用表单绑定呢?在那个教程中,我没有看到Student的子类在哪里。我试图让控制器及其视图处理基类的所有派生类,并避免为每个子类创建控制器/视图。