3.3.2.1.2.8. Actionクラスの作成¶
コラム
申請書ガジェットのActionクラスの詳細は「申請書ガジェットActionクラスプログラミング」を参照ください。
3.3.2.1.2.8.1. 申請書ガジェットのActionクラスについて¶
申請書ガジェットのActionクラスはガジェットバリエーションを問わない共通した処理を実装する「業務基底アクションクラス」と、ガジェットバリエーションごとに異なる処理を実装する「業務アクションクラス」を作成することを推奨します。
3.3.2.1.2.8.1.1. 業務基底アクションクラス¶
業務基底アクションクラスには、ガジェットバリエーションを問わないガジェットクラス共通の処理を実装します。クラス名は「”Abstract” + “業務名” + “ActionBase”」としてください。本チュートリアルでは、AbstractGadgetTutorialActionBaseクラスを作成します。package jp.co.slcs.kaiden2.tutorial.feature.action.kaiden.gadget; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.Stack; import jp.co.slcs.kaiden2.base.foundation.helper.NumberHelper; import jp.co.slcs.kaiden2.base.foundation.model.dto.LogicResultDto; import jp.co.slcs.kaiden2.base.foundation.util.ConvertForJsonSource; import jp.co.slcs.kaiden2.base.foundation.util.ResponseWriter; import jp.co.slcs.kaiden2.extension_imw.foundation.imw_page.AbstractImwPageForm; import jp.co.slcs.kaiden2.product_workflow.foundation.gadget.GadgetActionIF; import net.arnx.jsonic.JSON; import org.seasar.framework.container.SingletonS2Container; import org.seasar.struts.annotation.Execute; /** * チュートリアルガジェット基底クラス(Action). */ public abstract class AbstractGadgetTutorialActionBase implements GadgetActionIF { /** 申請画面のデータロード. */ @Override @Execute(validator = false) public String loadApply() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 再申請画面のデータロード. */ @Override @Execute(validator = false) public String loadReapply() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 一時保存画面のデータロード. */ @Override @Execute(validator = false) public String loadTempsave() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 処理画面のデータロード. */ @Override @Execute(validator = false) public String loadProcess() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 確認画面のデータロード. */ @Override @Execute(validator = false) public String loadConfirm() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** * 処理詳細画面のデータロード. * * @return Ajaxアクセスのため、常にnullを返却 */ @Override @Execute(validator = false) public String loadProcessDetail() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 画面表示用データを返却. */ @Override public LogicResultDto getViewData() { return getLogic().view(getForm(), new ConvertForJsonSource()); } /** 参照詳細画面のデータロード. */ @Override @Execute(validator = false) public String loadReferenceDetail() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 確認詳細画面のデータロード. */ @Override @Execute(validator = false) public String loadConfirmDetail() { ResponseWriter.writeJSon(JSON.encode(getViewData())); return null; } /** 申請書コピーのデータロード. */ @Override @Execute(validator = false) public String loadCopy() { ResponseWriter.writeJSon(JSON.encode(getLogic().viewForCopy(getForm(), getConvertor()))); return null; } /** 過去案件詳細画面のデータロード. */ @Override @Execute(validator = false) public String loadArchiveMatterDetail() { ResponseWriter.writeJSon(JSON.encode(getLogic().viewArchive(getForm(), getConvertor()))); return null; } /** 書式変換設定を返却. */ protected TutorialConvertor getConvertor() { return new TutorialConvertor(getForm()); } /** チュートリアルガジェットの書式変換. */ private class TutorialConvertor extends ConvertForJsonSource { /** リクエストパラメータ. */ private final AbstractImwPageForm frm; /** NumberHelper. */ private final NumberHelper numberHelper; /** コンストラクタ. */ public TutorialConvertor(AbstractImwPageForm frm) { this.frm = frm; numberHelper = SingletonS2Container.getComponent(NumberHelper.class); } /** 入力項目用書式変換. */ @Override protected Map<String, Object> formatPlainValue(Map<String, Object> map, Stack<String> fldNameStack) { Map<String, Object> result = new HashMap<String, Object>(map); // 金額の書式変換 if (result.containsKey("tutorialAmount")) { BigDecimal amount = (BigDecimal) result.get("tutorialAmount"); Object currencyCd = result.get("tutorialCurrencyCd"); result.put("tutorialAmount", numberHelper.formatCurrencyAmount4Input(amount, frm.searchCriteriaCompany, (String) currencyCd)); } return result; } /** 表示項目用書式変換. */ @Override protected Map<String, String> formatFormatedValue(Map<String, Object> map, Stack<String> fldNameStack) { Map<String, String> result = super.formatFormatedValue(map, fldNameStack); // 金額の書式変換 if (map.containsKey("tutorialAmount")) { BigDecimal amount = (BigDecimal) map.get("tutorialAmount"); Object currencyCd = map.get("tutorialCurrencyCd"); result.put("tutorialAmount", numberHelper.formatCurrencyAmount4View(amount, frm.searchCriteriaCompany, (String) currencyCd)); } return result; } } }
3.3.2.1.2.8.1.2. 業務アクションクラス¶
ガジェットActionクラスには、ガジェットバリエーションごとに異なる処理を実装します。クラス名は「”業務名” + “ガジェットバリエーション” + “Action”」としてください。本チュートリアルでは、GadgetTutorialV01Actionクラスを作成します。package jp.co.slcs.kaiden2.tutorial.feature.action.kaiden.gadget; import javax.annotation.Resource; import jp.co.slcs.kaiden2.extension_imw.foundation.imw_page.AbstractImwPageForm; import jp.co.slcs.kaiden2.extension_imw.foundation.manager.PluginLogicIF; import jp.co.slcs.kaiden2.tutorial.feature.form.kaiden.gadget.GadgetTutorialV01Form; import jp.co.slcs.kaiden2.tutorial.feature.logic.kaiden.gadget.tutorial.GadgetTutorialV01Logic; import org.seasar.struts.annotation.ActionForm; /** * チュートリアルv01ガジェット(Action). */ public class GadgetTutorialV01Action extends AbstractGadgetTutorialActionBase { /** Logic. */ @Resource public GadgetTutorialV01Logic gadgetTutorialV01Logic; /** Form. */ @ActionForm @Resource public GadgetTutorialV01Form gadgetTutorialV01Form; /** Logicを取得. */ @Override public PluginLogicIF getLogic() { return gadgetTutorialV01Logic; } /** Formを取得. */ @Override public AbstractImwPageForm getForm() { return gadgetTutorialV01Form; } }