2013-03-06 42 views
1

這託皮斯已經出現在其他職位,但沒有一個解決方案提到爲我工作所以我在這裏,希望有人能指出我在正確的方向。變化形式目標_blank與primefaces和的onComplete

基本上,我有Primefaces 3.5應用程序中使用2個CommandButton控件,其執行支持bean方法來生成兩個不同的報告,作爲一個輸出流(無可用的GET)。此報告中的一個是作爲附件生成的,而另一個報告應顯示在另一個選項卡中。兩者都以相同的形式。

我的問題來自在單獨的選項卡中生成的報表:由於報表共享相同的表單,因此我無法在表單定義中使用target = blank,並且由於必須在支持bean中執行驗證,所以我必須顯示可能的錯誤信息在主選項卡中,只有在一切順利時纔打開新的信息。

我試着在表單頁面下面的JS:

function test() { 
    document.getElementById("formRep3_1").target = '_blank'; 
} 

由bean調用

RequestContext.getCurrentInstance().execute("test()"); 

驗證成功後。但它不起作用。

我也試過在報告鍵在設置的onComplete =「測試()」,稍微修改JS是這樣的:

function test() { 
    var v = '<h:outputText value="#{repReqStatus.resultCheck}" />'; 
    if (v.value == "success") { 
     document.getElementById("formRep3_1").target = '_blank'; 
    } 
    else { 
     alert('no'); 
    } 
    } 

但似乎的onComplete沒有得到根本叫!即使我做了另一個檢查,如

oncomplete="if (!args.validationFailed){test()}" 

所以是的,我迷路了。任何幫助真的很感激。

謝謝!

+0

你能否修復你的代碼格式? – ChiefTwoPencils 2013-03-06 23:43:44

+0

這是AJAX請求嗎?如果這是AJAX請求,則無法使用_blank打開新窗口/選項卡。您必須在'onsuccess'手動打開新窗口。 – partlov 2013-03-07 07:49:16

+0

我也嘗試在我的commandButton中使用onsuccess,並且我可以打開一個新的選項卡......但是如果驗證失敗,無論如何都會打開新選項卡,並在第一頁中顯示錯誤消息。在這種情況下,是否有必須在我的代碼中設置不觸發onSuccess?謝謝! – user2142007 2013-03-07 22:32:53

回答

0

在調用鏈接的操作期間,您無法更改鏈接的目標。太晚了。

最好的辦法是不用target="_blank",而是在所需的URL上調用JavaScript window.open()。您可以在會話中存儲PDF報告,或爲URL準備請求參數,以便它可以根據這些請求參數生成所需的PDF報告。