0

我目前正在使用两个 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 中有以下内容。在调试中,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>
4

1 回答 1

0

视图范围的 bean 与当前视图相关联。当您通过导航到不同的视图来更改当前视图时,该不同的视图将获得视图范围 bean 的全新实例。请注意,它在 JSF2 中也以这种方式工作。

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

于 2013-08-22T12:06:22.510 回答