【问题标题】:How to stop JSF reload page "onclick"?如何停止 JSF 重新加载页面“onclick”?
【发布时间】:2011-06-21 11:00:13
【问题描述】:

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

用户从插件 GUI 退出后,JavaScript 函数“signDocument”完成执行。

我将本机代码切换到异步模式。所以 JS func 'signDocument' 立即返回执行,结果必须在最近获取。

我写JS代码,是这样的:

函数signDocument(dataTagID,tagID4Event){ var npapi = document.getElementById("npapi"); npapi.Sign(langId, content, desc, ts, sign); 我的日志(“确定”); var scheduler = setInterval( 功能() { 我的日志(“失败”); 如果(npapi.AddonGetState()!=“完成”) 返回; 清除间隔(调度程序); out_sign = npapi.SignValue(); fireHTMLEvent(tagID4Event, '点击'); }, 1000); } }

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

我将 .jsf 文件重写为:

我希望调度程序获取结果并触发事件。但是调度程序没有被调用,因为在用户单击第一个链接(可见)后,JS 调用了为 GUI 创建单独线程并返回给 JS 的本机代码。下一页重新加载,似乎所有 JS 对象都死为页面死(我通过 'mylog' func 进行检查)。

真的第一个h:commandLink标签转换成:

...

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

如何停止向onclick=""添加特殊代码?

【问题讨论】:

  • h:commandLink 会在 onClick 上渲染时添加表单提交逻辑,如果你不想额外的 javascript,你应该考虑简单的锚标签。

标签: javascript jsf jakarta-ee


【解决方案1】:

如果您不需要使用链接调用同步支持 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: 伪协议和return true; 完全是多余的。两者都已经是默认值了。您可能还会改用return false;,以便阻止链接的默认操作(转到页面顶部)。

【讨论】:

  • 我终于搞定了。感谢您的建议。 jsf引擎过滤的HTML“a”标签,所以我使用'h:outputLink'。和'返回错误;'是必不可少的,因为单击链接页面会随着调度程序而死。
  • 哦,您还在使用 JSF 1.0/1.1?纯 HTML 元素确实需要包含在 &lt;f:verbatim&gt; 标记中。另见stackoverflow.com/questions/3273595/…
猜你喜欢
  • 1970-01-01
  • 2019-12-20
  • 2014-02-05
  • 2020-11-27
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
相关资源
最近更新 更多