使用window.open()打开不同的链接

时间:2010-02-01 11:00:44

标签: javascript jsf hyperlink

我有一个dataTable,其中一列包含URL。点击这些链接后,我必须在新页面中打开相应的链接。我正在使用window.open()打开这些链接。 它打开一个新窗口但不显示页面。我正在使用的javascript代码是:

function openDisclaimer(objectId)
{
var disclaimerID = objectId.id;
var url = document.getElementById(objectId).value;
window.open(url);
}

<h:commandLink id="dsclaimLink" value="#{managePersonalization.disclaimerURL}" onclick="openDisclaimer(this);" >

3 个答案:

答案 0 :(得分:1)

首先,在古老的JSF版本中,有一个错误导致命令链接无法以这种方式工作。确保您使用的是最新版本/版本。 Mojarra可用here,MyFaces可用here

关于你的实际问题,commandlink基本上会生成提交父表单的链接。它应该放在h:form内,但在这里你只需要一个普通的链接。在这种情况下,请将其替换为h:outputLink。不要忘记将return false;添加到点击事件结束以阻止链接的默认操作。

<h:outputLink 
    value="#{managePersonalization.disclaimerURL}" 
    onclick="openDisclaimer(this); return false;">
    <h:outputText value="Disclaimer" />
</h:outputLink>

此外,value属性实际上最终为生成的href元素的<a>属性,因此需要修复您的JavaScript以获取href的网址属性而不是value属性(JavaScript没有看到JSF源代码,只有它生成的HTML输出!):

function openDisclaimer(link) {
    window.open(link.href);
}

您还会看到document.getElementById被删除,因为它已经将唯一元素作为函数参数,这没有任何意义! ;)

你甚至可以摆脱整个功能:

<h:outputLink 
    value="#{managePersonalization.disclaimerURL}" 
    onclick="window.open(this.href); return false;">
    <h:outputText value="Disclaimer" />
</h:outputLink>

或者,如果你真的想要一个有价值的标签/窗口而不是弹出窗口,那么你也可以只使用target属性您设置为_blank

<h:outputLink 
    value="#{managePersonalization.disclaimerURL}" 
    target="_blank">
    <h:outputText value="Disclaimer" />
</h:outputLink>

答案 1 :(得分:0)

你为什么不这样做:

<h:commandLink id="dsclaimLink" value="#{managePersonalization.disclaimerURL}" 
    onclick="window.open('#{managePersonalization.disclaimerURL}');" />

答案 2 :(得分:-1)

只需检查objectID返回的内容