2010-01-29 95 views
1

我想彈出一個窗口,當有人點擊數據表上的按鈕。問題與JSF 1.1和PopUp

        <h:commandButton 
             action="#{cacheController.popupDetails}" 
             immediate="false" 
             onclick="popup()" 
             value="View Details" 
             styleClass="submit"> 
            </h:commandButton> 

關聯的彈出功能

function popup() { 
window.open('RDDetails.jsf','popupWindow', 'dependent=yes, menubar=no, toolbar=no, height=500, width=400'); 
} 

現在,在新的「RDDetails.jsf」的文件,我試圖訪問同一managedBean cacheController。但問題是,在彈出的窗口和JSF的生命週期不同步,因此彈出窗口首先顯示空白,當我刷新時,它會提取正確的數據。

是否有無論如何我可以點擊一個按鈕,它將在託管然後打開一個彈出窗口,使處理後的數據fr失效om託管bean。

我正在使用JSF 1.1。

回答

3

你在這裏基本上發射 獨立請求:一個與表單關聯提交等將打開在彈出的RDDetails.jsf。您需要結合一個請求。您可以在兩種基本的方式實現這一目標:

  1. 擺脫onclick的,只是添加target="_blank"<h:form>,使其得到提交到一個新的窗口/標籤。

  2. 通過向onclick添加return false;來阻止默認操作,並在與RDDetails.jsf關聯的bean的構造函數中執行業務邏輯。唯一的(主要)警告是在這裏模型不會被更新的表單字段。因此,您需要在JavaScript幫助下手動將表單字段作爲彈出網址的請求參數。然後,您可以使用faces-config.xml中的託管屬性條目將GET請求參數注入到模型中。

第一種方式顯然是最簡單的方法,但這並不能給你一個「完全可用」的彈出式/模式式對話框。第二種方法有點難(除非你已經掌握了JavaScript和JSF)。然後我會考慮尋找一個組件庫,它提供了一個隨時可用的彈出組件。

+0

我試圖創建從後臺bean像這樣的URL - 的onclick = 「#{} cacheController.url」 和該網址將具有JSp樣式參數?param = value&param2 = value2等等。您認爲這會起作用嗎? – Shamik 2010-01-29 23:04:11

+0

不,您需要通過'window.open()'以相同的方式傳遞網址。 – BalusC 2010-01-29 23:12:47

+0

是我做這種方式 - 在這裏是在支持Bean我的getURL方法 - \t公共字符串的getURL(){ \t \t selectedRD =(RuleDisplayTO)dataTable.getRowData(); \t \t回報 「window.open('/ e2fo /工具/ cachetool/test.jsp的?NAME =」 \t \t \t \t + selectedRD。getName() \t \t \t \t +「','popupWindow','dependent = yes,menubar = no,toolbar = no,height = 500,width = 400'); return false;」; \t} – Shamik 2010-01-29 23:36:54

0

見我的例子:

<h:commandLink action="#{controller.myAction}" onmousedown="document.forms['idform'].target='_blank';"> 

我使用JSF 1.1

+1

你也可以在我的答案中簡單地添加'target =「_ blank」'到''。 – BalusC 2010-11-11 21:05:26