Aipoのテンプレートで呼んでるresultをセットしている場所

Aipoのテンプレート内でよく呼ばれている

$result

これはどこでセットしているのでしょうか。

例えばフォーム画面を表示する場合、

https://github.com/aipocom/aipo/blob/master/core/src/main/java/com/aimluck/eip/common/ALAbstractFormData.java

  /**
   * フォームを表示します。
   * 
   * @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の実態はこちら

https://github.com/aipocom/aipo/blob/master/core/src/main/java/com/aimluck/eip/modules/actions/common/ALSecureBaseAction.java

 

  /**
   * 
   * @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自身を呼ぶ

ようになっています。