0

我有一个关于两个 java bean 的问题,它们在 faces-config.xml 中声明,并且在 JSF 1.2 中有两个不同的托管 bean-scopes。首先,我想解释一下我现在遇到的问题。

我可以将一些信息从我的 java 系统导出到另一个系统(我认为数据的详细信息及其具体的传输方式并不那么重要)。

在我看来,重要的是,触发该导出的 java bean 具有托管 bean 范围“会话”。数据导出在我的系统背景下工作,需要这个会话范围。

用户可以在 jsf / xhtml 页面中看到一条信息,即导出已启动,具体问题如下:

<ui:repeat value="#{adminArea.informationForExport}" var="info">
    <h:outputText value="#{info}" />
</ui:repeat>

这个信息每次都是 HTML DOM 的一部分并且不会消失,如果用户在我的系统中观看另一个 xhtml 页面并返回到这个 xhtml 页面,他就可以开始数据导出。

我的 Bean“adminArea”在 faces-config.xml 中声明,带有托管 bean 范围“session”,并实现了用于数据导出的 java 代码:

<managed-bean>
    <managed-bean-name>adminArea</managed-bean-name>
    <managed-bean-class>resources.adminArea</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

声明的 bean“adminArea”在 bean“newCalculation”中被称为托管属性,它是托管 bean 范围“请求”:

<managed-bean>
    <managed-bean-name>newCalculation</managed-bean-name>
    <managed-bean-class>resources.calculation</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>        
    <managed-property>
        <property-name>adminArea</property-name>
        <value>#{adminArea}</value>
    </managed-property>     
</managed-bean>

此 bean 需要托管 bean 范围“请求”。

将bean“adminArea”的托管bean范围从“session”更改为“request”的唯一方法是什么?但这会导致问题,即我的数据导出在后台不起作用。

或者我可以用其他仪器解决这个问题吗?

格雷茨·马尔维德

4

1 回答 1

1

最终答案:

  1. 移至 JSF 2.0。它具有此处描述的许多有用功能。
  2. 如果您想在特定页面上显示特定信息,请尝试使用视图范围。查看此处以了解 Request 和 View 范围之间的区别。尝试将用户界面直接与视图范围的 bean 链接。您可以通过 ManagedProperty 注入接收的所有会话或应用程序信息。
  3. 我建议您拒绝使用 xml 配置的 bean 并转向注释。很好的评论,你可以在这里阅读。
  4. 关于 JSF 中的后台处理。这些事情通常由 Enterprise Java Bean (EJB) 执行。看看 EJB 3,也许还有Timer Service
于 2013-11-27T07:34:06.257 回答