【问题标题】:opening a page using "onclick " event of xpages link使用 xpages 链接的“onclick”事件打开页面
【发布时间】:2013-10-25 04:53:16
【问题描述】:

我很难在新标签中打开 xpage。我尝试了以下链接中建议的多种方法 No luck while opening a link in new tab using XPages 但没有运气。我不能使用“链接类型”,因为我通过传递父文档unid、文档unid、frompage等来动态生成url。这就是我使用链接的“onClick”事件的原因。任何帮助将不胜感激。在此先感谢下面是我的代码。

 <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:link escape="true" text="New Call"id="linkNewCall">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="linkNewCall">
<xp:this.action><![CDATA[#{javascript:var url="www.google.com"
//view.postScript("window.open('" + url + "')");
view.postScript("var tempwindow = window.open('" + url + "','_blank'); tempwindow.focus();")}]]></xp:this.action>
</xp:eventHandler></xp:link>
</xp:view>

【问题讨论】:

  • 您是否尝试过计算 URL 并在 xp:link 的 value 属性中返回它(如此答案:stackoverflow.com/a/15767044/785061)?
  • 您好,正如我的问题中提到的,我不能使用“链接类型”。我认为 this.value (href) 将设置为“页面加载”。但是,如果我有一个静态 URL,这将有效。谢谢

标签: xpages


【解决方案1】:

您可以在服务器端计算 URL,然后使用目标属性。这里我使用的是您的简单示例,但您可以进行各种计算:

<xp:link escape="false" id="linkNewCall" text="New Call" target="_blank">
    <xp:this.value><![CDATA[#{javascript:
        var href = "http://www.google.com";
        return href;
    }]]></xp:this.value>
</xp:link>

您也可以将值计算更改为“页面加载时计算”(只需将 # 更改为 $)。

【讨论】:

  • 绝对是最好的方法。
  • 您好,感谢您的评论。我正在尝试访问“this.value”中的 viewScope 变量,当我检查服务器控制台时,“打印”语句仅出现在页面加载时,而不是当我单击链接时。请在下面查看我的代码。我做错什么了吗?。即使我尝试将部分刷新设置为相同的链接 ID“linkNewCall”。&lt;xp:link escape="true" text="New Call" id="linkNewCall"&gt;&lt;xp:this.value&gt;&lt;![CDATA[#{javascript:print ("######"+viewScope.selectedTarget)}]]&gt;&lt;/xp:this.value&gt;&lt;xp:eventHandler event="onclick" submit="true" refreshMode="norefresh"&gt;&lt;/xp:eventHandler&gt;&lt;/xp:link&gt;
  • 何时何地更新 viewScope.selectedTarget?您需要从更新 viewScope 变量的控件中部分刷新 xp:link 控件
  • 嗨 Per,实际上即使是静态文本也没有打印出来。刚刚尝试打印静态文本打印(“#####”)。在“”中输入的任何代码在“onClick”期间都没有在控制台中打印,但是它正在“pageLoad”上打印
【解决方案2】:

由于您使用的是服务器端 Javascript,因此您可以使用它来打开新窗口。不需要使用 view.postScript 来做同样的事情。

有几种方法可以做到这一点。一种方法是查看 facesContext.getExternalContext() ...

view.postScript 有时在某些情况下不起作用,当它不起作用时,它通常不会返回错误,它只是什么都不做。

编辑:链接 onclick 事件也支持客户端 javascript,如果您真的很喜欢使用它,那么将您的代码放在那里。默认选项卡打开到服务器端,您必须单击“客户端”添加代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多