在另一个项目的xhtml中使用项目中的bean

时间:2013-08-16 23:26:41

标签: jsf maven primefaces ejb

我在同一个应用程序中有几个项目,结构粗糙:

    • EJB
    • 持久性
    • 网络

我使用Maven来解决所有依赖关系,并将所有内容很好地捆绑到WAR中,我稍后在JBoss上部署它。

我的问题是我的大部分模型都在ejb项目中,我需要在Backing Bean逻辑中(在web中)或直接在JSF .xhtmls中调用(也在web中)。

我已经浏览了互联网,包括堆栈溢出,并在SPRING上发现了大量示例以及如何导入/导出模块。好吧,既然我没有使用它,我不知道如何继续下去。

那么如何从其他项目导入/使用这些bean呢?

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

由于您正在使用您提到的技术堆栈,因此也可以选择CDI。无论如何,如果您将所有内容都打包为WAR,那么这只是运行时的一个模块。假设您具有以下结构:

--- WAR
 |--- any *.xhtml files can live here (public)
 |--- WEB-INF
   |--- web.xml (optional)
   |--- persistence.xml (optional) - declare persistence unit used from WEB-INF/classes
   |--- beans.xml (optional) enable CDI annotation scanning for WEB-INF/classes
   |--- faces-config.xml (optional) enable JSF annotation scanning in WEB-INF/classes
   |--- *.xhtml files can live here (private - usually templates, ui:composition, etc.)
   |--- classes
     |--- com.example - put managed beans here, EJBs, JPA etities or just about any other *.class
   |---lib
     |--- jpa.jar
       |--- META-INF
         |--- persistence.xml - persistence unit used in this jar
       |--- com.example - JPA entities can live here, gets mapped to WEB-INF/classes at runtime
     |--- ejb.jar
       |--- META-INF
         |--- ejb-jar.xml (optional) but can declare resources here
       |--- com.example - ejbs can live here, gets mapped to /WEB-INF/classes at runtime
     |--- faces.jar
       |--- META-INF
         |--- faces-config.xml - enables scanning JSF specific annotations in this jar
       |--- resources - this gets mapped to the WAR root at runtime, .xhtml can live here
       |--- com.example - put your @ManagedBean s here and @EJB inject anything from ejb.jar, gets mapped to /WEB-INF/classes at runtime
     |--- cdi.jar
       |--- META-INF
         |--- beans.xml - marks this as CDI bean archive
       |--- com.example - CDI beans can live here, gets mapped to WEB-INF/classes at runtime

请注意,即使我在上述结构中专门分离了jpa.jar,ejb.jar,faces.jar和CDI.jar,也没有任何说明 - 您可以根据需要混合搭配。要点拿走:

  1. 对于WAR WEB-INF/lib类中的任何jar,在运行时映射到/WEB-INF/classes
  2. beans.xml启用CDI
  3. faces-config.xml启用JSF注释扫描
  4. ejb-jar.xml在任何地方都不需要,但您可以利用它
  5. web.xml可以住在WEB-INF/,但不是必需的
  6. web-fragment.xml可以位于META-INF内任意广告内容的WEB-INF/lib文件夹中,并合并到web.xml
  7. .xhtml JSF文件可以存放在WEB-INF/(私有)内的Web应用根目录(公共)中,以及META-INF/resources内任何jar的WEB-INF/lib内 - 所有这些文件获取映射到Web应用程序根目录(即,如果在jar中它们位于WEB-INF/内,它们可以逻辑地结束于META-INF/resource/WEB-INF
  8. persistence.xml可以住在WEB-INF
  9. 内任意广告的META-INF内或WEB-INF/lib

    这应该只是掩盖它 - 让我知道是否有任何不清楚或可以添加。