将t:savestate bean传递给另一个bean

问题描述:

我有两个我正在使用的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> 

视图范围的bean绑定到当前视图。当您通过导航到其他视图来更改当前视图时,那么该不同视图将获得视图范围bean的全新实例。请注意,它在JSF2中也是这样工作的。

最好的办法是在window.open() URL(转义它们!)中传递所需的数据作为请求参数,以便打印bean可以将它们作为请求参数(通过托管属性或ExternalContext)。另一种方法是,将bean实例存储在会话范围内的唯一键和自动生成的键(例如java.util.UUID)中,并将该键作为请求参数传递,以便与打印页关联的bean可以通过该密钥从会话范围中获取数据。

+0

感谢Balus。我最终将viewDevicesPrint作为viewDevices中的子视图。然后,当点击打印按钮时,我使用ajax来填充子视图。之后,我使用.html()来提取子视图并将其写入一个新的window.open。它工作正常。我很想知道是否有办法将子视图编码为完整的html文档(使用

..标签)? –