Aipoのテンプレート内でよく呼ばれている
$result
これはどこでセットしているのでしょうか。
例えばフォーム画面を表示する場合、
/** * フォームを表示します。 * * @param action * @param rundata * @param context * @return TRUE 成功 FALSE 失敗 */ public boolean doViewForm(ALAction action, RunData rundata, Context context) { try { init(action, rundata, context); boolean isedit = (ALEipUtils.getTemp(rundata, context, ALEipConstants.ENTITY_ID) != null); int aclType = ALAccessControlConstants.VALUE_ACL_INSERT; if (isedit) { aclType = ALAccessControlConstants.VALUE_ACL_UPDATE; } doCheckAclPermission(rundata, context, aclType); action.setMode(isedit ? ALEipConstants.MODE_EDIT_FORM : ALEipConstants.MODE_NEW_FORM); mode = action.getMode(); List<String> msgList = new ArrayList<String>(); boolean res = (isedit) ? loadFormData(rundata, context, msgList) : setFormData( rundata, context, msgList); action.setResultData(this); if (!msgList.isEmpty()) { action.addErrorMessages(msgList); } action.putData(rundata, context); return res; } catch (ALPermissionException e) { ALEipUtils.redirectPermissionError(rundata); return false; } catch (ALPageNotFoundException e) { ALEipUtils.redirectPageNotFound(rundata); return false; } catch (ALDBErrorException e) { ALEipUtils.redirectDBError(rundata); return false; } }
setResultDataとputDataが呼ばれているのがわかります。
setResultDataの実態はこちら
/** * * @param obj */ @Override public void setResultData(Object obj) { result = obj; }
オブジェクトをそのままresultにセットしているのがわかります。
action.setResultData(this);
で呼んでいるので、resultにはthisつまり、FormDataであれば、FormDataそのものがresultにセットされます。
result.getUserId()であれば、FormData.getUserId()になる、ということですね。
/** * * @param context */ @Override public void putData(RunData rundata, Context context) { context.put(ALEipConstants.MODE, mode); context.put(ALEipConstants.RESULT, result); context.put(ALEipConstants.ERROR_MESSAGE_LIST, errmsgList); context.put(ALEipConstants.ENTITY_ID, ALEipUtils.getTemp( rundata, context, ALEipConstants.ENTITY_ID)); context.put("utils", new ALCommonUtils()); Map<String, String> attribute = ALOrgUtilsService.getParameters(); for (Map.Entry<String, String> e : attribute.entrySet()) { context.put(e.getKey(), e.getValue()); } if (Boolean.parseBoolean((String) rundata.getSession().getAttribute( "changeToPc"))) { // PC表示切り替え用 context.put("client", ALEipUtils.getClient(rundata)); } HttpServletRequest request = HttpServletRequestLocator.get(); if (request != null) { Object obj1 = request.getAttribute("SaaSMessageActionUrl"); if (obj1 != null) { context.put("SaaSMessageActionUrl", obj1.toString()); } } // For security context.put(ALEipConstants.SECURE_ID, rundata.getUser().getTemp( ALEipConstants.SECURE_ID)); }
context.put(ALEipConstants.RESULT, result);
でresultにセットしなおしています。
こうすることでテンプレート側の
$result
は
context.put(ALEipConstants.RESULT, result);
の結果を呼ぶ
↓
action.setResultData(this);
の結果を呼ぶ
↓
FormData自身を呼ぶ
ようになっています。