Не удается заставить Wizard Example работать в GateIn 3.1 GA - PullRequest
0 голосов
/ 07 октября 2011

Я не могу заставить пример мастера Richfaces работать в GateIn 3.1.

Я использую JSF 1.2, Facelets 1.1.15, GateIn 3.1 GA, Richfaces 3.3.3, IE8.

Я делаю репост здесь, так как в прошлом мне повезло с работой над stackoverflow (первоначально размещенной на пользовательском форуме JBoss, но я не получил никаких ответов).

Я создал файлы точно так же, какпример, но когда я нажимаю кнопку «Далее» на первой странице, следующая страница не включается (отображение не изменяется).

Я должен добавить, что у меня возникла та же проблема при попытке получить пример мастера модели Макса Кацаописано здесь: http://mkblog.exadel.com/2010/06/richfaces-wizard-inside-modal-panel/

У меня такая же проблема в IE8 и Chrome.

Примечание. Я также пытался добавить <redirect/> в правила навигации и при нажатии кнопки Далеезатем весь портлет переходит на пустую страницу.

Есть ли какая-нибудь помощь в отладке этого?Я включил log4j в DEBUG, но не вижу намеков на то, что не так.

Другое отличие состоит в том, что мы используем Spring.

Вот faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config 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-facesconfig_1_2.xsd"
    version="1.2">
    <application>
        <view-handler>org.jboss.portletbridge.application.PortletViewHandler</view-handler>
        <state-manager>org.jboss.portletbridge.application.PortletStateManager</state-manager>
    </application>

    <!-- SPRING INTEGRATION TO JSF -->
    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>

    <application>
        <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>es</supported-locale>
            <supported-locale>en</supported-locale>
        </locale-config>
    </application>

    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>

    <managed-bean>
        <managed-bean-name>profile</managed-bean-name>
        <managed-bean-class>com.Profile</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

    <navigation-rule>
        <from-view-id>/richfaces/include/examples/wstep1.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>next</from-outcome>
            <to-view-id>/richfaces/include/examples/wstep2.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule> 

    <navigation-rule>
        <from-view-id>/richfaces/include/examples/wstep2.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>previous</from-outcome>
            <to-view-id>/richfaces/include/examples/wstep1.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>next</from-outcome>
            <to-view-id>/richfaces/include/examples/finalStep.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule> 

    <navigation-rule>
        <from-view-id>/richfaces/include/examples/finalStep.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>previous</from-outcome>
            <to-view-id>/richfaces/include/examples/wstep2.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

Вот бин в spring-beans.xml:

<bean id="profile" class="com.Profile" scope="request" >
</bean>

Вот start.xhtml (именно из демо):

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">

    <style type="text/css">
        .col1 { vertical-align:top; }
        .col2 { vertical-align:top; width:450px; }
        .wizard { width:400px; }
        .wform td { vertical-align:top; }
        .wfcol1 { text-align: right; white-space:nowrap;}
        .wfcol2 { }
        .wfcol3 { }
        .s1row td { height:30px; }
        .rich-message { color:red;  }
        .navPanel {
            position:absolute;
            bottom:0;
            height:23px;
            margin:0;
            padding:2px;
        }
    </style>
    <br/>
    <h:panelGrid width="100%" columns="2" columnClasses="col1,col2">
        <a4j:keepAlive beanName="profile" />
        <rich:panel styleClass="wizard">
            <f:facet name="header">
                <h:outputText value="Using a4j:include for Wizard-like behaviour" />
            </f:facet>
            <h:form>
                <a4j:include viewId="/richfaces/include/examples/wstep1.xhtml" />
            </h:form>
        </rich:panel>
    </h:panelGrid>
    <br/>
</ui:composition>

Вот wstep1.xhtml (этоизначально страница загружается в портлет):

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">

    <div style="position:relative;height:140px">
        <h:panelGrid rowClasses="s1row" columns="3" columnClasses="wfcol1,wfcol2,wfcol3">
            <h:outputText value="First Name:" />
            <h:inputText id="fn" value="#{profile.firstName}" label="First Name" required="true" />
            <rich:message  for="fn" />

            <h:outputText value="Last Name:" />
            <h:inputText  id="ln" value="#{profile.lastName}"  label="Last Name"  required="true" />
            <rich:message  for="ln" />

            <h:outputText value="Company:" />
            <h:inputText id="comp" value="#{profile.company}"  label="Company"  required="true" />
            <rich:message for="comp"/>
        </h:panelGrid>
        <div class="navPanel" style="width:100%;">
            <a4j:commandButton style="float:right" action="next" value="Next &gt;&gt;"/>
        </div>
    </div>
</ui:composition>

Вот portlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
    xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
    version="2.0">

    <portlet>
        <portlet-name>Rule Portlet</portlet-name>
        <display-name>Rule Editor</display-name>
        <portlet-class>javax.portlet.faces.GenericFacesPortlet</portlet-class>
        <init-param>
            <name>javax.portlet.faces.defaultViewId.view</name>
            <value>/start.xhtml</value>
        </init-param>
        <init-param>
            <name>javax.portlet.faces.preserveActionParams</name>
            <value>true</value>
        </init-param>
        <supports>
            <mime-type>text/html</mime-type>
            <portlet-mode>VIEW</portlet-mode>
        </supports>
        <portlet-info>
            <title>Rule Editor</title>
        </portlet-info>
    </portlet>
</portlet-app>

Вот web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">

    <display-name>Filter Portal</display-name>

    <context-param>
        <param-name>org.jboss.portletbridge.WRAP_SCRIPTS</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.portlet.faces.renderPolicy</param-name>
        <param-value>ALWAYS_DELEGATE</param-value>
    </context-param>
    <context-param>
        <param-name>org.ajax4jsf.RESOURCE_URI_PREFIX</param-name>
        <param-value>rfRes</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>
    <context-param>
        <param-name>org.ajax4jsf.COMPRESS_SCRIPT</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>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>false</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>/faces/*</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>

    <!-- Spring Configuration -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-beans.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <context-param>
        <param-name>com.sun.faces.IS_SAVE_BINDINGS_STATE</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.RECREATE_VALUE_EXPRESSION_ON_BUILD_BEFORE_RESTORE</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.RESOURCE_RESOLVER</param-name>
        <param-value>com.CustomResourceResolver</param-value>
    </context-param>
</web-app>

1 Ответ

0 голосов
/ 02 марта 2012

Я думаю, что могут быть проблемы с тремя последними параметрами в вашем web.xml.Известно, что они вызывают проблемы с AJAX (у меня тоже были такие проблемы).Об этих параметрах мало документации.Хотя я нашел эти комментарии о них:

<!-- Undocumented, so using "default"...(should be used in conjunction with following 2 parameters)
<context-param>
        <param-name>com.sun.faces.IS_SAVE_BINDINGS_STATE</param-name>
        <param-value>false</param-value>
</context-param>
-->
<!-- http://javaspecialist.wordpress.com/2010/05/30/performance-tuning-of-seam-jsf-richfaces-for-webapps/
BUILD_BEFORE_RESTORE:
         Idea behind using buildBeforeRestore is to restore the view even if the associated session
         has expired and thereby avoiding the ViewExpiredException.
         Setting it to true, Facelets can build view before request processing
         instead of state saving. But this will cause some other issues.
 RECREATE_VALUE_EXPRESSION_ON_BUILD_BEFORE_RESTORE:
         In JSF 1.2 with Facelets, you can reduce the memory overhead by not saving
         the ValueExpressions. But for this you also need to set
         the BUILD_BEFORE_RESTORE to true, which can cause unpredictable behaviour
         for the components.

This paramS from facelets is notorious for breaking some of the Ajax components.
Seen with Richfaces Ajax4jsf. There isn’t any documented work around for this.
Hence explicitly turn both BUILD_BE… and RECREATE… to false.
--> 

И источник этого знания:
http://code.google.com/p/java-education/source/browse/trunk/JPA-Spring-JSF/CZU-PEF-DataModelling/web-gui/src/main/webapp/WEB-INF/web.xml?spec=svn200&r=200

Поэтому я предлагаю закомментировать это из вашего web.xml:

<context-param>
        <param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.RECREATE_VALUE_EXPRESSION_ON_BUILD_BEFORE_RESTORE</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.RESOURCE_RESOLVER</param-name>
        <param-value>com.CustomResourceResolver</param-value>
    </context-param>

Надеюсь, это поможет.

...