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

时间:2013-08-22 03:38:33

标签: jsf

我正在使用两个JSF 1.1页面。其中一个是viewDevices.jsp,另一个是vewDevicesPrint.jsp。它们都在视野范围内运行(使用tomahawk savestate,即)。在viewDevices中,它有一个用户可以单击以转到viewDevicesPrint.jsp的img。像这样:

<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中有以下内容。在debug中,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>

1 个答案:

答案 0 :(得分:0)

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

您最好的选择是将所需数据作为请求参数传递到window.open() URL(转义它们!),以便print bean可以将它们作为请求参数获取(通过托管属性或ExternalContext )。另一种选择,特别是如果您需要大量数据,则将bean实例存储在会话范围内的唯一且自动生成的密钥(例如java.util.UUID)下,并将该密钥作为请求参数传递,以便与关联的bean相关联使用打印页面可以通过该键从会话范围获取数据。