Jsf JBoss7.1Weld在耳朵的罐子中找到托管Bean,但战争没有

Jsf JBoss7.1Weld在耳朵的罐子中找到托管Bean,但战争没有,jsf,jboss7.x,managed-bean,jboss-weld,Jsf,Jboss7.x,Managed Bean,Jboss Weld,jboss-as-7.1.1,动态web模块3.0,JSF2.0(Mojarra),EclipseIndigoSR2 我有一个EAR,Ynale.EAR,它包含一个YnaleImpl.jar和一个Ynale.war: Ynale.ear |-YnaleWeb.war | |-META-INF | | |-MANIFEST.MF: | | Manifest-Version: 1.0 | | Class-Path: deploy

jboss-as-7.1.1,动态web模块3.0,JSF2.0(Mojarra),EclipseIndigoSR2

我有一个EAR,Ynale.EAR,它包含一个YnaleImpl.jar和一个Ynale.war:

Ynale.ear
  |-YnaleWeb.war
  |   |-META-INF
  |   |   |-MANIFEST.MF:
  |   |         Manifest-Version: 1.0
  |   |         Class-Path: deployment.Ynale.ear.YnaleImpl
  |   |
  |   |-WEB-INF
  |   |   |-beans.xml
  |   |   |       (empty)
  |   |   |
  |   |   |-faces-config.xml:
  |   |   |       <?xml version="1.0" encoding="UTF-8"?>
  |   |   |       <faces-config version="2.0" 
  |   |   |           xmlns="http://java.sun.com/xml/ns/javaee"
  |   |   |           xmlns:xi="http://www.w3.org/2001/XInclude"
  |   |   |           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  |   |   |           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
  |   |   |        </faces-config>
  |   |   |
  |   |   |-web.xml:
  |   |          <?xml version="1.0" encoding="UTF-8"?>
  |   |          <web-app version="3.0" 
  |   |              xmlns="http://java.sun.com/xml/ns/javaee"
  |   |              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  |   |              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  |   |              <display-name>YnaleWeb</display-name>
  |   |              <context-param>
  |   |                  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  |   |                  <param-value>server</param-value>
  |   |              </context-param>
  |   |              <context-param>
  |   |                  <param-name>primefaces.THEME</param-name>
  |   |                  <param-value>redmond</param-value>
  |   |              </context-param>
  |   |              <servlet>
  |   |                  <servlet-name>Faces Servlet</servlet-name>
  |   |                  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  |   |                  <load-on-startup>1</load-on-startup>
  |   |              </servlet>
  |   |              <servlet-mapping>
  |   |                  <servlet-name>Faces Servlet</servlet-name>
  |   |                  <url-pattern>*.jsf</url-pattern>
  |   |              </servlet-mapping>
  |   |              <servlet-mapping>
  |   |                  <servlet-name>Faces Servlet</servlet-name>
  |   |                  <url-pattern>*.xhtml</url-pattern>
  |   |              </servlet-mapping>
  |   |              <session-config>
  |   |                  <session-timeout>300</session-timeout>
  |   |                  <cookie-config>
  |   |                      <name>JSESSIONID</name>
  |   |                  </cookie-config>
  |   |                  <tracking-mode>COOKIE</tracking-mode>
  |   |              </session-config>
  |   |         </web-app>
  |   |
  |   |-Login.xhtml
  |            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  |            <html xmlns="http://www.w3.org/1999/xhtml"
  |                xmlns:h="http://java.sun.com/jsf/html"
  |                xmlns:f="http://java.sun.com/jsf/core"
  |                xmlns:ui="http://java.sun.com/jsf/facelets">
  |            <h:head>
  |                <title>YNALE Log in page</title>
  |            </h:head>
  |            <f:view>
  |                <body>   
  |                    <div>#{textValue.value()}</div>
  |                </body>
  |            </f:view>
  |            </html>
  |
  |-lib
      |-META_INF
      |      jboss-deployment-structure.xml:
      |          <jboss-deployment-structure>
      |              <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
      |              <deployment>
      |                  <dependecies>
      |                      <module name="deployment.Ynale.ear.YnaleImpl" export="true"/>
      |                  </dependencies>
      |              </deployment>
      |              <module name="deployment.Ynale.ear.YnaleImpl" >
      |                  <resources>
      |                      <resource-root path="lib/YnaleImpl.jar" />
      |                  </resources>
      |              </module>
      |          </jboss-deployment-structure>
      |
      |-YnaleImpl.jar:
          |-META-INF
          |     beans.xml:
          |         (empty)
          |     MANIFEST.MF:
          |         Manifest-Version: 1.0
          |
          |-org
              |-ynale
                  |-utils
                      |-TextValue.class
                                package org.ynale.utils;

                                import javax.faces.bean.ManagedBean;
                                import javax.faces.bean.RequestScoped;

                                @ManagedBean
                                @RequestScoped
                                public class TextValue {
                                    public TextValue() {}

                                    public String value() {
                                        return "TextValue";
                                    }
                                }
在Web.war中,我有login.xhtml,它有:

#{textValue.value()}
我在日志中没有收到任何错误(输出到FIN/DEBUG),但从未调用textValue.value()。我的页面上没有输出

有什么想法吗

编辑:WAR本身内部定义的托管bean工作正常

编辑2:对不起,我确实有一个,但忘了在帖子中包括:

<?xml version="1.0"?>
    <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xi="http://www.w3.org/2001/XInclude"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"/>

Weld是一个CDI实现,它不扫描JSF2特定的注释,它只扫描CDI特定的注释,如
@Named
。这里有一个JSF2特定的
@ManagedBean
注释。为此,您需要在JAR中有一个与JSF2兼容的
/META-INF/faces config.xml
,以便让JSF2 web应用程序扫描JAR文件中带有JSF2特定注释的类,JAR文件位于
/web-INF/lib

另见:

我知道你是专家!我已经花了两天时间看了你所有的其他帖子。这似乎不起作用。我在某处遗漏了一些东西……罐子必须进入战争的
/WEB-INF/lib
。JSF不会扫描其他地方的JAR。然而,CDI确实如此。如果将
@ManagedBean
替换为
@Named
(并从
javax.enterprise.context
导入
@RequestScoped
),那么它应该可以工作。但是EAR的
/lib
中的JAR通常不包含特定于web/前端的工件,因此这首先是完全错误的。EAR的
/lib
中的JAR通常包含共享业务(EJB/JPA/Entity)代码。代码在一个单独的JAR中的原因是,我将使用YnaleWeb.WAR访问internet,使用YnaleWS.WAR(web服务)访问intranet。我想分享所有的商业逻辑。一个特定的服务器实例可能运行一个或两个WAR。您知道更好的方法吗?业务逻辑属于EJB,而不是JSF管理的bean。让它成为无状态的(或者可能是有状态的),然后通过
@EJB
将它注入到WAR中的普通JSF托管bean中(当然也可以是
/WEB-INF/lib
中的JAR)。
<?xml version="1.0"?>
    <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xi="http://www.w3.org/2001/XInclude"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"/>