【问题标题】:Refer a manage bean from other project引用另一个项目的托管 bean
【发布时间】:2017-04-28 12:28:31
【问题描述】:

我使用 Google App Engine 1.9.51。在 Eclipse 中,我为多服务创建了 4 个项目: - 一只耳朵(GoalsCompletion) - 一个常见的 jave 项目 (GoalsCompletion_common) - 2 个 Web 应用程序(GoalsCompletion_default 和GoalsComletion_task),如下面的屏幕截图所示。

在网络应用中(例如GoalsCompletion_default), - 我有几个 jsf 文件是指公共项目中定义的管理 bean(即GoalsCompletion_common)。 - 我也有jave文件引用common project中定义的接口。

我将公共项目作为 Web 应用部署的依赖项包括在内,如下所示:

我面临的问题是在 web 应用程序中,当我在公共项目中调用 getter 管理 bean 时,没有任何返回。

例如

在 web.xml 中

<context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>#{userSession.theme}</param-value>

在jsf页面中

Current Theme: #{userSession.theme}

如果我将 UserSession Manage bean 从公共项目移动到 Web 应用程序,则返回值。

GAE 没有抱怨找不到类,没有错误只是返回空值,所以我的部署配置似乎有问题。有什么帮助吗?

【问题讨论】:

  • 解决方法是我将那些管理 bean 从公共项目添加到每个 Web 应用程序中的 faces-config.xml。它工作。所以看起来网络应用程序不会扫描其他项目生成的 jar 文件。不确定这是唯一的解决方案还是有更好的方法......
  • 阅读“网络片段”...
  • 您可以使用EJB-s 访问其他应用程序中的托管bean。或JAX-RS.
  • GAE 不支持 J2EE。而那个通用项目只是一个 java 项目,其中包含我计划由其他 2 个 Web 应用程序重用的代码。这就是为什么它被打包为 jar 文件并包含在其他 Web 应用程序项目中的原因。因此,无论我的应用服务器是否是 GAE,都无法与 EJB -s 或 JAX-RS 共享,因为它不是普通的 Web 应用。
  • 您需要在 common 项目中拥有 faces-config.xml 才能扫描托管 bean。请看stackoverflow.com/questions/7663818/…

标签: eclipse google-app-engine jsf


【解决方案1】:

经过几次尝试和错误...

实际上在 web app 项目中,如果包含 common 项目作为其 Web Deployment Assembly 的依赖项,我将不需要在 common 项目 /WEB-INF 文件夹中包含 faces-config.xml。

在这种情况下,我可以只使用注释而不是 xml 来配置 bean。

之所以没有提早出现这种情况是因为每次我对公共项目的 pom.xml 进行更改(例如包含新的依赖项或更改依赖项版本)时,Eclipse 都会删除我的设置 Web 部署程序集。

所以在部署/运行服务器之前,我只需要确保公共项目存在于其他 Web 项目的 Web 部署程序集部分。如果没有,我需要重新添加。

不确定这是一种使设置永久化的方法

【讨论】:

    【解决方案2】:

    感谢OTM对以上帖子的建议...

    是的,一个简单的解决方案就是在 faces-config.xml 中定义托管 bean,并将其放在 common 项目中的 \META-INF 下。

    faces-config.xml 示例:

    <?xml version="1.0"?>
    <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
        version="2.2">
    
        <managed-bean>
            <managed-bean-name>beanName</managed-bean-name>
            <managed-bean-class>package.BeanName</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
    

    【讨论】:

    • 使用 xml 来配置 bean 是非常古老的。使用注解更现代,当您使用 jsf 2.2 时,甚至建议开始使用 CDI 而不是 jsf 管理的 beans
    • 嗨,伙计...是的,我使用的是 2.2.10。我可以知道您使用 CDI 是什么意思吗?
    • 有一个叫做 google 的东西...google.com/search?q=cdi%2Bjsf 但使用 stackoverflow 搜索可以。然后是stackoverflow.com/questions/4347374/…
    猜你喜欢
    • 2012-12-12
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2016-12-26
    • 2011-11-04
    • 2013-07-06
    • 2015-04-23
    相关资源
    最近更新 更多