我有一个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);" >
答案 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返回的内容