首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使向导示例在GateIn 3.1 GA中工作

无法使向导示例在GateIn 3.1 GA中工作
EN

Stack Overflow用户
提问于 2011-10-07 23:30:54
回答 1查看 509关注 0票数 0

我无法在GateIn 3.1中使用Richfaces wizard example

我使用的是JSF1.2,Facelets 1.1.15,GateIn 3.1GA,Richfaces 3.3.3,IE8。

我在这里转帖,因为我过去在stackoverflow上有好运气(最初发布在JBoss用户论坛上,但没有收到任何回应)。

我已经创建了与示例中完全相同的文件,但是当我单击第一页上的Next按钮时,下一页不会被包括在内(显示不会改变)。

我应该补充说,我在尝试获取这里描述的Max Katz模型向导示例时也遇到了同样的问题:http://mkblog.exadel.com/2010/06/richfaces-wizard-inside-modal-panel/

我在IE8和Chrome上也遇到了同样的问题。

注意:我还尝试将<redirect/>添加到导航规则中,当我单击Next按钮时,整个portlet将转到一个空白页面。

在调试方面有什么帮助吗?我打开log4j进行调试,但是没有看到任何关于哪里出了问题的提示。

另一个区别是我们使用Spring。

这是faces-config.xml

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<bean id="profile" class="com.Profile" scope="request" >
</bean>

下面是start.xhtml (完全来自演示):

代码语言:javascript
复制
<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 (此页面最初加载到portlet中):

代码语言:javascript
复制
<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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

发布于 2012-03-02 04:24:22

我认为你的web.xml中的最后三个参数可能有问题。众所周知,它们会导致AJAX出现问题(我也遇到过这些问题)。关于这些参数的文档很少。尽管我找到了关于他们的评论:

代码语言:javascript
复制
<!-- 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中注释掉这一点:

代码语言:javascript
复制
<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>

希望对您有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7689454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档