【问题标题】:Uncaught ReferenceError: RichFaces is not defined Richfaces 3.x to 4.x未捕获的 ReferenceError:未定义 RichFaces Richfaces 3.x 到 4.x
【发布时间】:2016-05-16 09:55:33
【问题描述】:

我正在对这个旧应用程序进行大规模迁移。它使用 JSF1.2、Seam 2.2 和 Richfaces 2.x。我们将它迁移到 JSF 2.1、Seam 2.3 和 Richfaces 4.x。迁移后我无法加载任何 css 或 js。

我从萤火虫那里得到了这个错误:

orderForm.seam:9 Uncaught ReferenceError: jQuery is not 定义(匿名函数)@ orderForm.seam:9 orderForm.seam:17 未捕获的 ReferenceError:未定义 RichFaces

这是我的模板 xhtml(已编辑以替换名称的 src 属性):

<?xml version="1.0" encoding="utf-8"?>
<!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:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:s="http://jboss.org/schema/seam/taglib">


<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>company name</title>
    <link rel="shortcut icon" href="#{request.contextPath}/favicon.ico" />
    <h:outputStylesheet name="/private/stylesheet/theme.xcss" />
<h:outputStylesheet name="/private/stylesheet/default.css" />
<h:outputStylesheet name="/private/stylesheet/CalendarControl.css" />
<h:outputStylesheet name="/private/stylesheet/theme.css" />
<h:outputScript name="/private/js/jquery.js" />
<h:outputScript name="/private/js/idle-timer.js" />
<h:outputScript name="/private/js/jquery.formatCurrency.js" />
<h:outputScript name="/private/js/CalendarControl.js" />
</h:head>
<body>
    <ui:insert name="head" />
    <script type="text/javascript">
        jQuery.noConflict();
    </script>

    <rich:popupPanel style="background-color: white;" id="eula"
        autosized="true" width="500" moveable="false" resizeable="false">
        <f:facet name="header">
            <h:outputText value="Eula" />
        </f:facet>
        <center>
            <iframe src="eula.html"
                style="height: 410px; width: 500px; overflow: auto; border: 1px solid #666; padding: 8px;" />
            <h:form>
                <h:commandButton action="#{identity.logout()}" value="I Decline" />
                <h:commandButton action="#{authenticator.markEulaAgreed()}"
                    value="I Accept" />
            </h:form>
        </center>
    </rich:popupPanel>



</body>
</html>

我尝试尽可能简化组合以跟踪问题:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:s="http://jboss.org/schema/seam/taglib"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:a="http://agilers.com/taglib"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j"
    template="layout/2columns-even.xhtml">



</ui:composition>

这里是 web.xml:

<?xml version="1.0" ?>
<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_3_0.xsd"
    version="3.0">

    <session-config>
        <cookie-config>
            <http-only>true</http-only>
        </cookie-config>
    </session-config>


    <!-- RichFaces -->
    <context-param>
        <param-name>org.richfaces.skin</param-name>
        <param-value>DEFAULT</param-value>
    </context-param>

    <!-- Suppress spurious stylesheets -->
    <context-param>
        <param-name>org.richfaces.enableControlSkinning</param-name>
        <param-value>false</param-value>
    </context-param>

    <context-param>
        <param-name>org.richfaces.enableControlSkinningClasses</param-name>
        <param-value>false</param-value>
    </context-param>

    <!-- Change load strategy to DEFAULT to disable sending scripts/styles as 
        packs -->
    <context-param>
        <param-name>org.richfaces.resourceOptimization.enabled</param-name>
        <param-value>false</param-value>
    </context-param>


    <error-page>
        <error-code>400</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>401</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>402</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>403</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>405</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>406</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>407</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>408</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>409</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>410</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>411</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>412</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>413</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>414</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>415</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>416</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>417</error-code>
        <location>/Error404.html</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>501</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>502</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>503</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>504</error-code>
        <location>/index.html</location>
    </error-page>
    <error-page>
        <error-code>505</error-code>
        <location>/index.html</location>
    </error-page>




    <context-param>
        <description>CAS renew</description>
        <param-name>renew</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/taglib/company.taglib.xml</param-value>
    </context-param>

    <filter>
        <display-name>HSTS Filter</display-name>
        <filter-name>HSTSFilter</filter-name>
        <filter-class>com.company.filter.HSTSFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HSTSFilter</filter-name>
        <url-pattern>*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <filter>
        <display-name>IE9 Filter</display-name>
        <filter-name>ie9filter</filter-name>
        <filter-class>com.company.filter.IE9Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ie9filter</filter-name>
        <url-pattern>*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <filter>
        <filter-name>SessionIdFilter</filter-name>
        <filter-class>com.company.filter.SessionIdFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SessionIdFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://www.company.com/login/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>https://www.company.com</param-value>
        </init-param>
    </filter>
    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>https://www.company.com/login</param-value>
        </init-param>
        <init-param>
            <param-name>redirectAfterValidation</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>https://www.company.com</param-value>
        </init-param>
    </filter>
    <filter>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
    </filter>
    <filter>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
    </filter>
    <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <url-pattern>/private/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/private/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/private/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/private/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <url-pattern>/private/*</url-pattern>
    </filter-mapping>
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
    </listener>
    <listener>
        <listener-class>com.company.servlet.SessionServletListener</listener-class>
    </listener>
    <filter>
        <filter-name>Seam Filter</filter-name>
        <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
        <init-param>
            <param-name>createTempFiles</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>maxRequestSize</param-name>
            <param-value>1000000</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Seam Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>Seam Resource Servlet</servlet-name>
        <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Seam Resource Servlet</servlet-name>
        <url-pattern>/seam/resource/*</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</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>*.seam</url-pattern>
    </servlet-mapping>
    <security-constraint>
        <display-name>Restrict raw XHTML Documents</display-name>
        <web-resource-collection>
            <web-resource-name>XHTML</web-resource-name>
            <url-pattern>*.xhtml</url-pattern>
        </web-resource-collection>
        <auth-constraint />
    </security-constraint>
    <persistence-unit-ref>
        <persistence-unit-ref-name>companyEntityManagerFactory</persistence-unit-ref-name>
        <persistence-unit-name>company</persistence-unit-name>
    </persistence-unit-ref>




</web-app><servlet-name>Seam Resource Servlet</servlet-name>
        <url-pattern>/seam/resource/*</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</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>*.seam</url-pattern>
    </servlet-mapping>
    <security-constraint>
        <display-name>Restrict raw XHTML Documents</display-name>
        <web-resource-collection>
            <web-resource-name>XHTML</web-resource-name>
            <url-pattern>*.xhtml</url-pattern>
        </web-resource-collection>
        <auth-constraint />
    </security-constraint>
    <persistence-unit-ref>
        <persistence-unit-ref-name>companyEntityManagerFactory</persistence-unit-ref-name>
        <persistence-unit-name>company</persistence-unit-name>
    </persistence-unit-ref>




</web-app>

编辑 2:我验证了在旧版本上,firebug 的资源选项卡不存在来自 JSF 和richfaces 的资源,但它仍在工作,并且在 xhtml 中添加的资源正确存在,而在迁移版本上只有 JSF 和 Richfaces,但它们都带有 .seam 扩展名,而且我明确声明的资源不存在。另一个有趣的事实是,如果我把它放在 web.xml 中,它就会发生:

<context-param>
        <param-name>org.richfaces.resourceOptimization.enabled</param-name>
        <param-value>false</param-value>
    </context-param>

否则它不会给加载的资源带来任何东西。

鉴于有错误的新 web.xml 已更改为:

Uncaught ReferenceError: A4J is not defined

【问题讨论】:

  • 好吧,一个h:output*tags have no src attribute。但是如果你有任何 Seam 过滤器,它可能会干扰资源。
  • 尝试禁用资源servlet,并检查&lt;head&gt;中生成的内容,资源未正确链接。
  • 禁用 Seam Resource servlet 并没有什么不同,但我在问题描述中添加了更多信息
  • 加载你自己的jquery会导致这个;摆脱/private/js/jquery-*
  • @MichaelLemos 你能解决这个问题吗?我有一个类似的RichFaces is not defined 错误,目前还没有找到解决方案

标签: jsf-2 richfaces seam2


【解决方案1】:

此库“A4J”已从 Richfaces 4 中删除,如下所述:access.redhat.com/solutions/882623

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2012-06-04
    • 2021-06-23
    相关资源
    最近更新 更多