javascript - 如何停止 JSF 重新加载页面 "onclick"?

标签 javascript jsf jakarta-ee

我从原生 NPAPI/XPCOM/ActiveX 获取 JavaScript 的结果。以前用户通过以下方式激活 native GUI:

   <h:commandLink styleClass="send-doc-link" value="#{msg.send}"
       onclick="javascript:signDocument('data');return true;"
       action="#{internalPayment.sendDocument}"/>

和 JavaScript 函数“signDocument”在用户退出附加 GUI 后完成执行。

我将 native 代码切换到异步模型。所以 JS func 'signDocument' 立即返回执行并且必须最近获取结果。

我写的JS代码是这样的:

function signDocument(dataTagID, tagID4Event) {
    var npapi = document.getElementById("npapi");
    npapi.Sign(langId, content, desc, ts, sign);
    mylog("OK");
    var scheduler = setInterval(
           function() {
                    mylog("FAIL");
                    if (npapi.AddonGetState() != "finished")
                        return;
                    clearInterval(scheduler);
                    out_sign = npapi.SignValue();
                    fireHTMLEvent(tagID4Event, 'click');
            }, 1000);
    }
}

尝试在 1 秒间隔内获得结果并通过触发“点击”事件模拟链接按下。 在测试静态 HTML 测试中一切正常。

我将 .jsf 文件重写为:

  <h:commandLink styleClass="send-doc-link" value="#{msg.send}"
    onclick="javascript:signDocument('data', 'signDocumentCallbackID');return true;"/>
  <t:commandLink styleClass="hidden" id="signDocumentCallbackID" forceId="true"
    onclick="return true;" action="#{internalPayment.sendDocument}"/>

我希望调度程序获取结果并触发事件。但是调度程序不会被调用,因为在用户单击第一个链接(可见)后,JS 调用 native 代码,该代码为 GUI 创建单独的线程并执行返回给 JS。下一页重新加载,似乎所有 JS 对象都随着页面的消失而消失(我通过“mylog”函数检查)。

真正先将h:commandLink标签转换为:

<a href="#" onclick="var cf = function(){javascript:signDocument('data', 'signDocumentCallbackID');return true;};var oamSF = function(){return oamSubmitForm('j_id_jsp_179411707_1','j_id_jsp_179411707_1:j_id_jsp_179411707_5');};return (cf()==false)? false : oamSF();" class="send-doc-link">...

因此在我的 JS 代码中添加了 oamSubmitForm,这似乎重新加载了我的页面并删除了 sheduler。

如何停止将特殊代码包含到onclick=""

最佳答案

如果您不需要使用链接调用同步支持 bean 操作,则只需替换 <h:commandLink>通过 <h:outputLink>或者只是 <a> .

<h:outputLink styleClass="send-doc-link" onclick="signDocument('data', 'signDocumentCallbackID')">
    <h:outputText value="#{msg.send}" />
</h:outputLink>

<a href="#" styleClass="send-doc-link" onclick="signDocument('data', 'signDocumentCallbackID')">
    <h:outputText value="#{msg.send}" />
</a>

请注意 javascript:伪协议(protocol)和 return true;完全是多余的。两者都已经是默认值。您可能还会使用 return false;相反,这样链接的默认操作(转到页面顶部)将被阻止。

关于javascript - 如何停止 JSF 重新加载页面 "onclick"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424210/

相关文章:

javascript - 如何从 JSON 对象中删除内部属性

javascript - 在 Firefox 和 IE 中禁用/禁用后退按钮的替代方法

java - 在 Java 中重新抛出异常时未完全维护堆栈跟踪

java - 如果没有 wtpwebapps 文件夹,则无法在 Tomcat 7 上部署 WAR 文件

javascript - 如果未定义则定义 Float32Array

javascript - Angular2 中的文件上传不起作用

javascript - webkit-filter 后获取元素背景色

java - 没有 faces-config 的 JSF 2.0 国际化

jsf - 命令按钮在第二次按下时调用操作 (jsf)

java.lang.ClassNotFoundException : org. quartz .DisallowConcurrentExecution