0

Richfaces ウィザードの例を GateIn 3.1 で動作させることができません。

JSF 1.2、Facelets 1.1.15、GateIn 3.1 GA、Richfaces 3.3.3、IE8 を使用しています。

過去にstackoverflowで幸運に恵まれたので、ここに再投稿します(最初はJBossユーザーフォーラムに投稿しましたが、応答がありませんでした)。

例とまったく同じようにファイルを作成しましたが、最初のページで [次へ] ボタンをクリックすると、次のページが含まれません (表示は変わりません)。

ここで説明されている Max Katz モデル ウィザードの例を取得しようとすると、同じ問題が発生することを付け加えておく必要があります

IE8 と Chrome で同じ問題が発生しています。

注: ナビゲーション ルールにも追加しようとしまし<redirect/>たが、[次へ] ボタンをクリックすると、ポートレット全体が空白のページに移動します。

これをデバッグするのに何か助けはありますか? log4j を DEBUG にしましたが、何が問題なのかについてのヒントはありません。

もう 1 つの違いは、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>
4

1 に答える 1

0

web.xml の最後の 3 つのパラメータに問題があると思います。それらは 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>

それが助けになることを願っています。

于 2012-03-01T20:24:22.220 に答える