同じスーパークラスの複数のサブクラスを処理するために、単一の 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を使用しています
編集:オブジェクトをビューに接続しようとしないことを考えています。興味深いケースとして編集/更新アクションを見ると、編集時に、オブジェクトからリストをロードして、それをビューに表示します。作成時に、ユーザーがビューに入力した List にある値からオブジェクトの値を設定します。それは降下の解決策でしょうか?