2013-08-22 50 views
0

我有兩個我正在使用的JSF 1.1頁面。其中之一是viewDevices.jsp,另一個是vewDevicesPrint.jsp。他們都在視圖範圍內運行(使用tomahawk savestate,就是這樣)。在viewDevices中,它有一個img用戶可以點擊進入viewDevicesPrint.jsp。像這樣:將t:savestate bean傳遞給另一個bean

<img src="redesign/images/printicon2.png" alt="print records" border="0" width="16" height="16" onClick="javascript:window.open('/viewDevicesPrint.jsf','_blank','height=500,width=900,menubar=yes, toolbar=yes,scrollbars=yes')"/> 

當點擊這個IMG,我想viewDevicesBean當前實例傳遞給viewDevicesPrintBean。有沒有辦法做到這一點?

我在faces-config.xml中有以下內容。在調試中,viewDevicesPrintBean獲取viewDevicesBean的一個新實例,而不是它的當前實例。

<managed-bean> 
    <managed-bean-name>viewDevicesPrintBean</managed-bean-name> 
    <managed-bean-class>com.arch.myaccount.jsf.ViewDevicesPrintBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>param_viewDevicesBean</property-name> 
     <value>#{viewDevicesBean}</value> 
    </managed-property> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>viewDevicesBean</managed-bean-name> 
    <managed-bean-class>com.arch.myaccount.jsf.ViewDevicesBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>param_flow</property-name> 
     <value>#{param.Flow}</value> 
</managed-property> 
</managed-bean> 

回答

0

視圖範圍的bean綁定到當前視圖。當您通過導航到其他視圖來更改當前視圖時,那麼該不同視圖將獲得視圖範圍bean的全新實例。請注意,它在JSF2中也是這樣工作的。

最好的辦法是在window.open() URL(轉義它們!)中傳遞所需的數據作爲請求參數,以便打印bean可以將它們作爲請求參數(通過託管屬性或ExternalContext)。另一種方法是,將bean實例存儲在會話範圍內的唯一鍵和自動生成的鍵(例如java.util.UUID)中,並將該鍵作爲請求參數傳遞,以便與打印頁關聯的bean可以通過該密鑰從會話範圍中獲取數據。

+0

感謝Balus。我最終將viewDevicesPrint作爲viewDevices中的子視圖。然後,當點擊打印按鈕時,我使用ajax來填充子視圖。之後,我使用.html()來提取子視圖並將其寫入一個新的window.open。它工作正常。我很想知道是否有辦法將子視圖編碼爲完整的html文檔(使用 ..標籤)? –

相關問題