Oracle MAF:(签名捕获)从Managed Bean调用javascript函数

Oracle MAF : (Signature Capture) Calling a javascript function from Managed Bean

本文关键字:Managed Bean 调用 函数 javascript MAF Oracle      更新时间:2023-09-26

我遵循本教程来获取Oracle MAF应用程序中的签名捕获功能。

当我尝试使用教程中解释的简单POC时,我使其工作没有任何问题。我把同样的逻辑集成到我的项目中。


以下是我为集成所做的设置,

  • 我已经在任务下将js and css文件包含到maf-feature.xml中流定义(我有amx页)。
  • 我已经将bean的作用域定义为pageFlow内部XXXXX-task-flow.xml文件而不是adfc-mobile-config.xml下面,

    <managed-bean id="__20">
      <managed-bean-name>signatureCapture</managed-bean-name>
      <managed-bean-class>package.SignatureCapture</managed-bean-class>
      <managed-bean-scope>pageFlow</managed-bean-scope>
    </managed-bean>
    
  • 当我调用fetchHandlercleaHandler方法使用下面commandButton,它正在调用方法而没有失败。

从方法中,下面的语句不会触发JavaScript

在fetchHandler方法中:

AdfmfContainerUtilities.invokeContainerJavaScriptFunction(AdfmfJavaUtilities.getActiveContextId(), "doFetch",
                                                              new Object[] { });

在clearHandler方法中:

AdfmfContainerUtilities.invokeContainerJavaScriptFunction(AdfmfJavaUtilities.getActiveContextId(), "doClear",
                                                              new Object[] { });

下面是JavaScript (MyFile.js)供您参考,

(function () {
    // This method clears the signature area
    doClear = function () {
    alert("Clear function called.!");
        var sigElement = document.getElementById("sig");
        if (sigElement == null)
            alert("sigElement not found");
        var sig = $(sigElement);
        sig.signature('clear');
        adf.mf.api.invokeMethod("package.SignatureCapture", "FetchCallback", "", onInvokeSuccess, onFail);
    };
    // This method gets the signature as a JSON string.  As an example, it does an alert of the string and then sends it to a Java handler for further processing
    doFetch = function () {
    alert("Fetch function called.!");
        var sigElement = document.getElementById("sig");
        if (sigElement == null)
            alert("sigElement not found");
        var sig = $(sigElement);
        var fetchData = sig.signature('toJSON');
        adf.mf.api.invokeMethod("package.SignatureCapture", "FetchCallback", fetchData, onInvokeSuccess, onFail);
    };
    function onInvokeSuccess(param) {
    alert("onInvokeSuccess");
    };
    function onFail() {
        alert("It failed");
    };
})();

任何建议都将是感激的。如果您需要更多的细节,请在下面评论。

尝试使用您的特性ID(作为字符串)而不是AdfmfJavaUtilities.getActiveContextId()

从Oracle文档(点击):

public static Object invokeContainerJavaScriptFunction(String featureId,
                                                       String methodName,
                                                       Object[] args)

参数:

  • featureId:要调用方法的特性的id
  • methodName:方法名
  • args:要传递的参数数组

的回报:

    一个JSON对象

就像你自己看到的那样,AdfmfJavaUtilities.getActiveContextId()没有返回featureID而是返回当前功能的活动EL上下文的名称(点击)