Strutsを使った開発は未だによくあると思います。そしてActionクラスを継承した基底Actionクラスをプロジェクト専用で用意する事も多々あると思います。そこでGenericsを活用しましょうというお話です。
public abstract class ActionBase<T extends ActionForm> extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
String result = process((T)form, request,response);
if(result == null){
return null;
}
return mapping.findForward(result);
}
public abstract String process( T form,
HttpServletRequest request,
HttpServletResponse response) throws Exception;
}
アクションフォームを型パラメータにする事で、かならずやるアクションフォームのキャストが不要になります。Genericsとは無関係ですが、アクションフォワードではなく文字列を返すようにしています。実装クラスはこんな感じになります。
public class HogeAction extends ActionBase<HogeForm>{
public String process(HogeForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
if(form.getFoo() == 0){
return "failure";
}
return "success";
}
}キャストが不要になっただけでもシンプルかなと思います。こんな感じでシンプルに扱えるので、Dyna~Form系は使わない方がよいですね。