p:commandLink无法在新窗口/选项卡中打开页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p:commandLink无法在新窗口/选项卡中打开页面相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个链接,在不同的窗口/选项卡中打开一个新页面,并显示一些来自支持bean的消息但是没有这样做,想知道为什么?
这是我的xhtml文件:
<html:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<h:form id="form66">
<p:commandLink actionListener="#{testing.getMessage}" action="msg.xhtml" target="_blank">get Msg</p:commandLink>
</h:form>
</h:body>
</html>
这是我的Msg.xhtml页面
<HTML xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>testing</title>
</h:head>
<h:body>
<div class="div">
<p:panel>
<f:facet name="header">
testing
</f:facet>
<div class="paddingForPanel">
<h:outputText value="#{testing.msg}" escape="false"/>
</div>
</p:panel>
</div>
</h:body>
</HTML>
这是我的testing.java
public void getMessage() {
this.msg = "haha";
}
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
上面的代码无法打开一个新的选项卡/窗口,我尝试像下面这样做,它成功在新选项卡中打开新页面但msg为空,当我调试时,它成功调用了监听器getMessage,我想知道为什么msg.xhtml页面中的msg为空?提前致谢....
<p:commandLink actionListener="#{testing.getMessage}" oncomplete="window.open('msg.xhtml')">broadcast Msg</p:commandLink>
答案
<p:commandLink>
有一些ajax问题,请改用<h:commandLink>
。
<h:commandLink actionListener="#{testing.printMessage}" action="/Msg.html" target="_blank">get Msg</h:commandLink>
将<p:commandLink>
更改为<h:commandLink>
,您的代码工作正常。
另一答案
两者都没有工作,所以问题不在aface中。 p:commandLink的target属性问题,它无法正常工作......
<p:commandLink value="New Window" ajax="false" target="_blank" action="test"/>
<p:commandLink value="New Window" target="_blank" action="test"/>
所以我们必须使用
<h:commandLink value="New Window" target="_blank" action="test"/>
另一答案
我是这样做的:
<p:commandLink id="link" actionListener="#{testing.getMessage}"
oncomplete="popupwindow('msg.xhtml', 'newwindow');" >
<h:outputText value="broadcast Msg" />
</p:commandLink>
使用一些javascript:
<script type="text/javascript">
function popupwindow(url, title) {
window.open(url , title, "toolbar=no, scrollbars=yes, resizable=yes, top=170, left=170, width=800, height=600");
}
</script>
在这个例子中,你打开一个新窗口,希望它有所帮助!
另一答案
如果您使用的是remotecommand,那么您可以这样做
<p:remoteCommand name="lookAndBookNewTab"
process="@this" action="#{lookAndBookMB.onPageLoadForNewTab()}"
rendered="#currentUserManager.
hasPermission('LookAndBook','View')}" update=":messageForm:growl" />
而我的javascript:
<script>
if(event.ctrlKey && event.shiftKey && event.keyCode == 119) {
lookAndBookNewTab();
event.preventDefault();
</script>
服务器端操作方法:
public String onPageLoadForNewTab(){
HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); String url = req.getRequestURL().toString();
url=(url.substring(0, url.length() - req.getRequestURI().length()) + req.getContextPath() + "/"); url=url+navigationpagename+".jsf"; RequestContext.getCurrentInstance().
execute("window.open('"+url+"','_blank')");**
return ""; }
另一答案
在您的控制器代码中尝试这个,它对我来说非常有用。
HttpServletResponse res = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String uri = req.getRequestURI();
res.getWriter().println("<script>window.open('" + myUrl + "','_blank', 'location=yes,height=600,width=800,scrollbars=yes,status=yes'); window.parent.location.href= '"+uri+"';</script>");
FacesContext.getCurrentInstance().responseComplete();
另一答案
像这样,
<h:link target="_blank" value="Other page" outcome="your url"></h:link>
祝好运!
另一答案
像这样
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<h:outputStylesheet library="base" name='jquery-ui-1.8.16.custom.css' />
</h:head>
<span style="background-color: rgb(192, 192, 192);">
<h:form target="_blank">
<p:commandButton value="Run" action="#{bean.createReport}" />
</h:form>
</span>
</html>
以上是关于p:commandLink无法在新窗口/选项卡中打开页面的主要内容,如果未能解决你的问题,请参考以下文章
在新选项卡/窗口中打开链接而不丢失当前 JSF 页面的视图范围