代码之家  ›  专栏  ›  技术社区  ›  Markos Fragkakis

Jboss Seam:在WebLogic 10.3.2(11g)上启用调试页

  •  5
  • Markos Fragkakis  · 技术社区  · 16 年前

    我想在weblogic10.3.2(11g)上启用Seam调试页面。因此,我做了以下工作:

    <context-param>
            <param-name>org.jboss.seam.core.init.debug</param-name>
            <param-value>true</param-value>
    </context-param>
    

    现在,当我点击我的应用程序的URL时,我得到了调试页面,但有一个例外(文章末尾的完整stacktrace):

    引起 线程(确保没有两个 “已安装)”

    <?xml version="1.0" encoding="UTF-8"?>
    <components xmlns="http://jboss.com/products/seam/components"
            xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="
            http://jboss.com/products/seam/core
            http://jboss.com/products/seam/core-2.2.xsd
            http://jboss.com/products/seam/components
            http://jboss.com/products/seam/components-2.2.xsd">
            <core:init debug="true"/>
    </components>
    

    关于如何正确启用调试页有什么建议吗?

    干杯

    完整堆栈跟踪:

    org.jboss.seam.contexts.PageContext.getPhaseId(PageContext.java:163)
    org.jboss.seam.contexts.PageContext.isBeforeInvokeApplicationPhase(PageContext.java:175)
    org.jboss.seam.contexts.PageContext.getCurrentWritableMap(PageContext.java:91)
    org.jboss.seam.contexts.PageContext.remove(PageContext.java:105)
    org.jboss.seam.Component.newInstance(Component.java:2141)
    org.jboss.seam.Component.getInstance(Component.java:2021)
    org.jboss.seam.Component.getInstance(Component.java:2000)
    org.jboss.seam.Component.getInstance(Component.java:1994)
    org.jboss.seam.Component.getInstance(Component.java:1967)
    org.jboss.seam.Component.getInstance(Component.java:1962)
    org.jboss.seam.faces.FacesPage.instance(FacesPage.java:92)
    org.jboss.seam.core.ConversationPropagation.restorePageContextConversationId(ConversationPropagation.java:84)
    org.jboss.seam.core.ConversationPropagation.restoreConversationId(ConversationPropagation.java:57)
    org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:391)
    org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230)
    org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196)
    com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
    com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
    weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
    weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
    weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
    weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3592)
    weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)
    weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)
    weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)
    weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
    

    现在“调试”页根本不会出现。当我要求 http://localhost/myapp/debug.xhtml

    myapp/debug.xhtml

    • jboss-seam-debug-2.2.0.GA.jar
    • jboss-el-1.0\u 02.CR4.jar

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 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_2_5.xsd"
    version="2.5">
    <display-name>PRS 6.0</display-name>
    
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <!--
        The default behavior of JSF is to map the incoming request for a JSF
        view identifier (view ID for short) to a JSP file with the file
        extension .jsp. To get JSF to look for a Facelets template instead, we
        must register the .xhtml extension as the default suffix for JSF views
    -->
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>
    
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    
    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>
            /WEB-INF/faces-config/application.xml
        </param-value>
    </context-param>
    
    <context-param>
        <param-name>facelets.REFRESH_PERIOD</param-name>
        <param-value>2</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>
    
    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    
    <context-param>
        <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
        <param-value>com.sun.facelets.FaceletViewHandler</param-value>
    </context-param>
    <context-param>
        <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>org.ajax4jsf.COMPRESS_STYLE</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
        <param-value>NONE</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.SKIN</param-name>
        <param-value>blueSky</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.CONTROL_SKINNING</param-name>
        <param-value>enable</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.LoadStyleStrategy</param-name>
        <param-value>ALL</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.LoadScriptStrategy</param-name>
        <param-value>ALL</param-value>
    </context-param>
    
    
    <!-- Seam Filter -->
    <!-- (MUST BE FIRST)-->
    <filter>
        <filter-name>Seam Filter</filter-name>
        <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Seam Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- RichFaces filter -->
    <filter>
        <display-name>RichFaces Filter</display-name>
        <filter-name>richfaces</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
        <init-param>
            <description>Set the size limit for uploaded files as attachments in bytes. (max 5MB)</description>
            <param-name>maxRequestSize</param-name>
            <param-value>5242880</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>richfaces</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    
    <listener>
        <listener-class>
            XX.XXXX.XXX.prs.web.listeners.ResourceInitializationListener</listener-class>
    </listener>
    
    <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener>
    
    <listener>
        <listener-class>XX.XXXX.XXX.prs.web.listeners.EJBInjectionListener</listener-class>
    </listener>
    <!-- Seam Listener-->
    <listener>
        <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
    </listener>
    
    <!-- Faces Servlet -->
    <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>*.xhtml</url-pattern>
    </servlet-mapping>
    

    --&燃气轮机; --&燃气轮机; --&燃气轮机; /seam/资源/*</url模式>--&燃气轮机; --&燃气轮机;

    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
    
    </web-app>
    

    faces.config文件

    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-facesconfig_1_2.xsd"
    version="1.2">
    
    <application>
        <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>en</supported-locale>
        </locale-config>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
        <el-resolver>org.jboss.seam.el.SeamELResolver</el-resolver>
        <resource-bundle>
            <base-name>XX.XXXX.XXX.prs.web.messages.messages</base-name>
            <var>msgs</var>
        </resource-bundle>
        <resource-bundle>
            <base-name>XX.XXXX.XXX.prs.web.messages.validation</base-name>
            <var>val</var>
        </resource-bundle>
    </application>
    
    <lifecycle>
        <phase-listener>XX.XXXX.XXX.prs.web.listeners.SetFocusListener</phase-listener>
    </lifecycle>
    <!--    <lifecycle>-->
    <!--
        <phase-listener>XX.XXXX.XXX.prs.web.listeners.DebugPhaseListener</phase-listener>
    -->
    
    <converter>
        <converter-for-class>XX.XXXX.XXX.prs.model.Applicant</converter-for-class>
        <converter-class>
            XX.XXXX.XXX.prs.web.common.converters.ApplicantConverter</converter-class>
    </converter>
    
    <validator>
        <validator-id>EmailValidator</validator-id>
        <validator-class>XX.XXXX.XXX.prs.web.common.validators.EmailValidator</validator-class>
    </validator>
    
    
    </faces-config>
    

    <?xml version="1.0" encoding="UTF-8"?>
    <components xmlns="http://jboss.com/products/seam/components"
    xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://jboss.com/products/seam/core
        http://jboss.com/products/seam/core-2.2.xsd
        http://jboss.com/products/seam/components
        http://jboss.com/products/seam/components-2.2.xsd">
    
    <core:init debug="true" />
    
    <core:manager concurrent-request-timeout="500"
        conversation-timeout="1200000" conversation-id-parameter="cid"
        parent-conversation-id-parameter="pid" />
    

    更新2:

    这些家伙 here 有同样的问题。他们有一个外耳项目,包含了内部战争项目。他们讨论说,这可能与jar如何最终进入项目有关。

    我更改了maven-war插件的设置,将特定于web的jar(链接中提到的jar,如RichFaces、jboss-seam-debug、Facelets等)留在war中。

    然而,问题又回到了以前的形式。我现在得到debug页面,不管我按哪个链接,除了初始的异常。

    由java.lang.IllegalStateException引起,消息为:“没有绑定到当前线程的阶段id(请确保没有安装两个SeamPhaseListener实例)”

    application.ear的结构如下:

    application.ear
    |--> APP-INF
    | |--> classes
    |--> lib (all jar dependencies go here, including the WAR dependencies, EJB module dependencies)
    |-->META_INF
    | |--> application.xml
    | |--> data-sources.xml
    | |--> MANIFEST.MF
    | |--> weblogic.xml
    | |--> weblogic-application.xml
    |--> jboss-seam-2.2.0.GA.jar
    |--> myEjbModule1.jar
    |--> myEjbModule2.jar
    |--> myEjbModule3.jar
    |--> myEjbModule4.jar
    |--> myWar.war (NO libraries in WEB-INF/lib, finds everything in EAR/lib)
    

    在部署未启用调试的.ear应用程序时(不包括ear中的jboss-seam-debug.jar),应用程序被正确加载。

    在EAR(EAR/lib目录)中使用jboss-seam-debug.jar进行部署时,应用程序不会出现,只会出现调试页面,但会出现以下异常(末尾的stacktrace):

    请求处理期间出现异常:

    引起 线程(确保没有两个 SeamPhaseListener实例 “已安装)”

    当“JBoss”同一个EAR时(删除JBoss提供的hibernate jar,并将所有库从EAR/lib移到EAR root),应用程序将正确加载。应用程序和调试页面都显示正确。

    完整堆栈跟踪:

    org.jboss.seam.contexts.PageContext.isBeforeInvokeApplicationPhase(PageContext.java:175) org.jboss.seam.contexts.PageContext.remove(PageContext.java:105) org.jboss.seam.Component.getInstance(Component.java:2021) org.jboss.seam.Component.getInstance(Component.java:2000) org.jboss.seam.Component.getInstance(Component.java:1967) org.jboss.seam.Component.getInstance(Component.java:1962) org.jboss.seam.faces.FacesPage.instance(FacesPage.java:92) org.jboss.seam.core.ConversationPropagation.restoreConversationId(ConversationPropagation.java:57) org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:391) org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230) com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114) com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104) javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292) weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) org.ajax4jsf.webapp.BaseFilter.processuploadsandHandlerRequest(BaseFilter.java:388) org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) weblogic.servlet.internal.WebAppServletContext$servletinLocationAction.run(WebAppServletContext.java:3592) weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108) weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432) weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

    3 回复  |  直到 16 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    您将得到以下异常

    没有绑定到当前线程的阶段id(确保没有安装两个SeamPhaseListener实例)

    但是你说你已经安装了一个ejb和webmaven项目。在部署应用程序时,两者可能都包含SeamPhaseListener。它也许可以解释为什么会出现异常(安装了两个SeamPhaseListener实例)。

    总是 使用Seam gem生成项目

    看见 here 为什么?

    here

    添加到原始答案

    看看行动书中的Seam是怎么说的

    在Seam 2.0中,Seam阶段侦听器 在facesconfig.xml描述符中 包括在内 只要您在应用程序中包含这个JAR文件,就可以使用

    所以,你不用担心SeamPhaseListener。Seam会的。

    更新

    首先,您有一个ear应用程序。在继续之前

    每个EJB和war模块 在application.xml(描述ear的文件)中

    应该像这个 (我们称您的耳朵应用程序为pureCharger)

    pureCharger.ear
    
        META-INF
            application.xml
        pureCharger-ejb.jar
            META-INF
                ejb-jar.xml
                persistence.xml
            lib
                // libraries ONLY USED by your EJB module goes here
        pureCharger-war.war
            WEB-INF
                web.xml
                components.xml
                faces-config.xml
                pages.xml
            lib
                // Here is what you want
                jboss-seam-debug.jar 
                jboss-seam-ui.jar
                jsf-facelets.jar
                // other libraries ONLY USED by your war module goes here
        jboss-seam.jar
        lib
            // JBoss Expression Language is used by both EJB and war module
            jboss-el.jar
            // libraries SHARED by all of your modules goes here
    

    ejb-jar.xml如下所示(它通过ejb组件启用@injection)

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar 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/ejb-jar_3_0.xsd" version="3.0">
        <interceptors>
            <interceptor>
                <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
            </interceptor>
        </interceptors>
        <assembly-descriptor>
            <interceptor-binding>
                <ejb-name>*</ejb-name>
                <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
            </interceptor-binding>
        </assembly-descriptor>
    </ejb-jar>
    

    是一个EJB模块

    也应该申报 在application.xml文件中。而且,如上所述,你 不必定义 SeamPhaseListener,因为jboss-seam.jar包含SeamPhaseListener。所以不要看到这个好消息

    因此,ear application.xml应该如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <application version="5" 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/application_5.xsd">
        <display-name>pureCharger</display-name>
        <module>
            <ejb>pureCharger-ejb.jar</ejb>
        </module>
        <module>
            <ejb>jboss-seam.jar</ejb>
        </module>
        <module>
            <web>
                <web-uri>pureCharger-war.war</web-uri>
                <context-root>pureCharger</context-root>
            </web>
        </module>
    </application>
    

    好啊走吧

    3. 要启用调试页吗

    将提供

    所以components.xml应该如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <components xmlns="http://jboss.com/products/seam/components"
        xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
        http://jboss.com/products/seam/core
        http://jboss.com/products/seam/core-2.2.xsd
        http://jboss.com/products/seam/components
        http://jboss.com/products/seam/components-2.2.xsd">
        <core:init jndi-pattern="pureCharger/#{ejbName}/local" debug="true"/>
        <core:manager concurrent-request-timeout="500" conversation-timeout="120000" conversation-id-parameter="cid" />
    </components>
    

    我已经定义了全局JNDI地址 我想是吧 您正在使用JBoss,ear应用程序被称为pureCharger),以便Seam检索其EJB组件

    最后,我们的web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 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_2_5.xsd">
        <context-param>
            <param-name>facelets.DEVELOPMENT</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
            <param-value>.xhtml</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>server</param-value>
        </context-param>
        <!--It must be the first-->
        <filter>
            <filter-name>Seam Filter</filter-name>
            <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>Seam Filter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!--It must be the first-->
        <listener>
            <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.xhtml</url-pattern>
        </servlet-mapping>
        <!--specified in minutes-->
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    </web-app>
    

    还有我们的faces-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-facesconfig_1_2.xsd" version="1.2">
    <application>
        <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>en</supported-locale>
        </locale-config>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
        <resource-bundle>
            <base-name>XX.XXXX.XXX.prs.web.messages.messages</base-name>
            <var>msgs</var>
        </resource-bundle>
        <resource-bundle>
            <base-name>XX.XXXX.XXX.prs.web.messages.validation</base-name>
            <var>val</var>
        </resource-bundle>
    </application>
    </faces-config>
    

    几张纸条

    您不需要在faces-config.xml中声明org.jboss.seam.el.SeamELResolver,因为 .

    我们需要调用调试页面(不要忘记启动JBoss并部署ear应用程序)

    http://127.0.0.1:8080/pureCharger/debug.xhtml

    如果你真的想避免头痛,使用seam gem

    如上图所示 ??? 确保 不包含 任何jboss-seam.jar文件。你说过

    • jboss-seam-debug-2.2.0.GA.jar(错误)它必须放在war文件WEB-INF/lib文件夹中
    • jboss-el-1.0_02.CR4.jar(错误)它必须放在ear file lib文件夹中
    • jboss-seam-2.2.0.GA.jar(右),但必须在ear META-INF/application.xml文件中声明

    Here

    http://www.seamframework.org/Community/MavenWithSeam

    http://www.seamframework.org/Documentation/SeamWithMavenOverview

    http://www.seamframework.org/Community/SeamInActionChapter2345And6Mavenized

    http://www.seamframework.org/Community/MavenSeamArchetype

    当做

        2
  •  2
  •   Markos Fragkakis    16 年前

    调试页面没有出现的原因(对我来说)令人难以置信。

    我用apachemaven打包了我的应用程序。传统上,maven管理的jar文件的文件名也包含版本号。Seam的jar是jboss Seam -2.2.0.GA版本 罐子因为Seam是应用程序中的EJB模块,所以我声明了它的依赖关系。实际上,EAR将其作为EJB模块(位于EAR的根目录中)包含,并在META-INF/application.xml中声明了它。

    我不知道规范是否为EAR中的EJB模块定义了命名限制,但是文件名的版本部分是WebLogic不喜欢的(如果修改,war在JBoss上可以正常工作)。

    <ejbModule>
        <groupId>org.jboss.seam</groupId>
        <artifactId>jboss-seam</artifactId>
    </ejbModule>
    

    <ejbModule>
        <groupId>org.jboss.seam</groupId>
        <artifactId>jboss-seam</artifactId>
        <bundleFileName>jboss-seam.jar</bundleFileName>
    </ejbModule>
    

    现在我可以看到我的应用程序和调试页面。

        3
  •  0
  •   Shervin Asgari    16 年前

    你是说默认的Seam调试页面吗?哪个是debug.seam?典型的 http://localhost:8080/debug.seam ?

    仅仅放入web.xml是不够的。您还需要放入components.xml

    <core:init debug="true" jndi-pattern="myApp/#{ejbName}/local"/>
    

    你还需要确保 jboss-seam-debug.jar文件 Seam的拦截器会自动接收到这个。

    如果您使用的是Facelets,那么要获取其调试页面,您需要将其放入web.xml中

    <context-param>
      <param-name>facelets.DEVELOPMENT</param-name>
      <param-value>true</param-value>
    </context-param>
    

    我还看到Arthur说您需要确保jboss-seam-debug.jar不应该出现在您的库中。这不一定是正确的。

    myapp.war/WEB-INF/lib/jboss-seam-debug.jar