복붙노트

[SPRING] jsf 2.0으로 스프링 웹 플로우를 구성하는 방법은 무엇입니까?

SPRING

jsf 2.0으로 스프링 웹 플로우를 구성하는 방법은 무엇입니까?

JSF2.0을 스프링 웹 플로우의 뷰 기술로 통합하는 데 문제가 있습니다. 나는 거의 "거의"작동하도록 만들었지 만 남은 유일한 것은 JSF2.0에 대한 ajax 지원을 구성하는 것입니다.

Ajax 요청이 보내지면 서버의 응답이 수신되지만 응답은 구성 요소의 다시 렌더링을 트리거하지 않습니다.

문제를 해결하는 데 도움이되는 몇 가지 단서 :

구성 파일이 필요한 경우 - 질문에 게시합니다.

어떤 도움을 주셔서 감사합니다. 이것이 전체 기술 스택을 사용하는 것을 막는 문제라고 보입니다.

해결법

  1. ==============================

    1.1 단계 web.xml

    1 단계 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>JSF2.0 with Spring webflow</display-name>
    
        <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                    /WEB-INF/config/web-application-config.xml
                </param-value>
            </context-param>
    
            <context-param>
                <param-name>javax.faces.PROJECT_STAGE</param-name>
                <param-value>Production</param-value>
            </context-param>
    
            <context-param>
                <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
                <param-value>1</param-value>
            </context-param>
    
        <filter>
                <filter-name>charEncodingFilter</filter-name>
                <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                <init-param>
                    <param-name>encoding</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
                <init-param>
                    <param-name>forceEncoding</param-name>
                    <param-value>true</param-value>
                </init-param>
            </filter>
    
            <filter-mapping>
                <filter-name>charEncodingFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
    
            <servlet>
                <servlet-name>facesServlet</servlet-name>
                <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
            </servlet>
    
            <servlet-mapping>
                <servlet-name>facesServlet</servlet-name>
                <url-pattern>/faces/*</url-pattern>
            </servlet-mapping>
            <servlet-mapping>
    
                <servlet-name>facesServlet</servlet-name>
                <url-pattern>*.jsf</url-pattern>
            </servlet-mapping>
    
            <servlet-mapping>
                <servlet-name>facesServlet</servlet-name>
                <url-pattern>*.faces</url-pattern>
            </servlet-mapping>
    
            <servlet-mapping>
                <servlet-name>facesServlet</servlet-name>
            <url-pattern>*.xhtml</url-pattern>
            </servlet-mapping>
    <servlet>
            <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value></param-value>
            </init-param>
            <load-on-startup>2</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
            <url-pattern>/spring/*</url-pattern>
        </servlet-mapping>
    
    
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
         <listener>
            <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
        </listener>
    
         <listener>
            <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
        </listener> 
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
        </welcome-file-list>
    </web-app>
    

    2 단계 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_2_0.xsd"
                version="2.0">
            </faces-config>
    

    3 단계 : 3 webflow-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:webflow="http://www.springframework.org/schema/webflow-config"
           xmlns:faces="http://www.springframework.org/schema/faces"
           xsi:schemaLocation="
               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.3.xsd
               http://www.springframework.org/schema/faces http://www.springframework.org/schema/faces/spring-faces-2.2.xsd">
    
        <!-- Executes flows: the central entry point into the Spring Web Flow system -->
        <webflow:flow-executor id="flowExecutor">
            <webflow:flow-execution-repository max-executions="1" />
            <webflow:flow-execution-attributes>
                <webflow:always-redirect-on-pause value="true"/>
            </webflow:flow-execution-attributes>
            <webflow:flow-execution-listeners>
                <webflow:listener ref="securityFlowExecutionListener"/>
                <webflow:listener ref="facesContextListener"/>
            </webflow:flow-execution-listeners>
        </webflow:flow-executor>
    
        <!-- The registry of executable flow definitions -->
        <webflow:flow-registry id="flowRegistry" flow-builder-services="facesFlowBuilderServices" base-path="/WEB-INF/flows">
            <webflow:flow-location-pattern value="/**/*-flow.xml" />
        </webflow:flow-registry>
    
        <!-- Configures the Spring Web Flow JSF integration -->
        <faces:flow-builder-services id="facesFlowBuilderServices" development="true" />
    
        <!-- Installs a listener to apply Spring Security authorities -->
        <bean id="securityFlowExecutionListener" class="org.springframework.webflow.security.SecurityFlowExecutionListener"/>
    
            <!-- Installs a listener that creates and releases the FacesContext for each request. -->
        <bean id="facesContextListener" class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener"/>
    
    
    </beans>
    

    단계 : 4 webmvc-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:faces="http://www.springframework.org/schema/faces"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/faces http://www.springframework.org/schema/faces/spring-faces-2.4.xsd
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    
        <faces:resources />
    
        <!-- Maps request URIs to controllers.  Here we have two kinds of flows one  is login flow and another is main flow   -->           
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <value>
                    /main=flowController
                   </value>
            </property>
            <property name="defaultHandler">
                <!-- Selects view names to render based on the request URI: e.g. /main selects "main" -->   
                <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
            </property>
        </bean>
    
        <!-- it is used to handle the flow control Adaptor in 2.3.0.   This will come from spring framework.web.servlet3.2.1 -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    
        <!-- Handles requests mapped to the Spring Web Flow system and ajaxHandler.
        after security we need to enable the ajax for that we need to write one property i.e ajaxHandler -->
        <bean id="flowController" class="org.springframework.webflow.mvc.servlet.FlowController">
            <property name="flowExecutor" ref="flowExecutor" />
             <property name="ajaxHandler">
            <bean class="org.springframework.faces.webflow.JsfAjaxHandler"/>
        </property>
        </bean>
    
        <!-- Maps logical view names to Facelet templates in /WEB-INF (e.g. 'search' to '/WEB-INF/search.xhtml' -->
        <bean id="faceletsViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
            <property name="viewClass" value="org.springframework.faces.mvc.JsfView"/>
            <property name="prefix" value="/WEB-INF/" />
            <property name="suffix" value=".xhtml" />
        </bean>
    
        <bean id="facesContextListener"  class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener" />
    
    
    </bean>
    
    </beans>
    
  2. ==============================

    2.최근 스프링 웹 플로우 프로젝트에서 JSF 1에서 JSF 2로 마이그레이션했습니다. 나중에 나는 아약스가 작동하지 않는다는 것을 알아 냈다. webmvc-config.xml에이 두 bean을 설정했습니다.

    최근 스프링 웹 플로우 프로젝트에서 JSF 1에서 JSF 2로 마이그레이션했습니다. 나중에 나는 아약스가 작동하지 않는다는 것을 알아 냈다. webmvc-config.xml에이 두 bean을 설정했습니다.

    첫 번째 빈이 문제였다.

    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
        <property name="flowExecutor" ref="flowExecutor"/>
    </bean>
    
    <bean class="org.springframework.faces.webflow.JsfFlowHandlerAdapter">
        <property name="flowExecutor" ref="flowExecutor" />
    </bean>
    

    둘 다 가질 수 없습니다. JsfFlowHandlerAdapter 만 가지고 있는지 확인하십시오.

    <bean class="org.springframework.faces.webflow.JsfFlowHandlerAdapter">
        <property name="flowExecutor" ref="flowExecutor" />
    </bean>
    

    다음은 내 프로젝트의 일부 프레임 워크 버전입니다.

        <spring.version>3.2.13.RELEASE</spring.version>
        <jsf.version>2.2.8-02</jsf.version>
        <org.springframework.webflow>2.4.0.RELEASE</org.springframework.webflow>
        <org.springframework.security.version>3.2.4.RELEASE</org.springframework.security.version>
    
  3. from https://stackoverflow.com/questions/4825904/how-to-configure-spring-webflow-with-jsf-2-0 by cc-by-sa and MIT license