在我的项目中,我有一个命令链接,其中“ target”属性值设置为“ _blank”。因此,如果出现验证错误,它将打开一个新窗口并显示错误消息。
但是要求是,如果验证正确,则应将其定位到新窗口,否则它将保留在同一页面中并显示错误消息。
现有代码:
<p:commandLink value="View"
styleClass="view_link"
ajax="false"
action="#{bean.someMethod('preview')}"
target ="_blank" />
我的儿子:
<p:commandLink value="View"
styleClass="view_link"
ajax="false"
action="#{bean.someMethod('preview')}"
target="#{bean.target}">
<p:ajax listener="#{bean.handelAjaxBehavoiurEvent}"/>
</p:commandLink>
在listner方法中,我正在验证表单并为p:commandlink设置目标值。但这不起作用。
预期结果:当我单击链接时,它应该验证表单值。如果值正确,则在浏览器中打开一个新选项卡并预览pdf文件。否则在现有页面上显示错误消息。
这是为什么,因为在检查链接本身时会打开新链接。我想在表单验证后设置目标属性的值。
答案 0 :(得分:0)
这就是我做这些事情的方式:
我有一个xhtml页面来查看任何 PDF(即mypdfviewer.xhtml)。
Bean设置了一些返回参数,例如validationOk,pdfname,viewoptions等,并通过addCallbackParam()
返回这些参数。在oncomplete
中,我会寻找这些值,如果可以,请打开新标签。
对话框:
<p:commandLink ajax="true" value="View" action="#{bean.someMethod('preview')}" oncomplete="return myPdfView(args)"/>
Bean:
public void someMethod(String what) {
...
RequestContext.getCurrentInstance().addCallbackParam("validationOk", true);
RequestContext.getCurrentInstance().addCallbackParam("pdfFile", myfile);
JavaScript:
function myPdfView(args) {
if(args && args.validationOk) {
window.open("mypdfviewer.xhtml?file=" + args.pdfFile, '_blank');
}
}