Moinsn,
ich möchte ein existierendes Webflow JSF- Primefaces Projekt um spring mvc via UrlBasedViewResolver erweitern um lesbare urls zu bekommen.
Dummerweise bekomme ich eine
[WR]WARN PageNotFound:183 - Request method 'POST' not supported[/WR]
Warnung wenn mein Suchformular eine ajax oder btn action feuert.
Das zugehörige @ManagedBean wird nicht aufgerufen und der Browserresponse lautet
[WR]HTTP ERROR 405 Problem accessing /app/WEB-INF/views/suche.xhtml. Reason: Request method 'POST' not supported[/WR]
anbei der code:
web.xml:
[XML]
<display-name>My Transport</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:res/conf/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFSULT_SUFFIX</param-name>
<param-value>.xhtml.xml</param-value>
</context-param>
<context-param>
<param-name>faceslets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_RESOLVER_REFRESH_PERIOD</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>hot-sneaks</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>Resources Servlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Resources Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>mvc-dispatcher</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>1</load-on-startup>
</servlet>
<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>mvc-dispatcher</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Push Servlet</servlet-name>
<servlet-class>org.primefaces.push.PushServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Push Servlet</servlet-name>
<url-pattern>/primepush/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter>
<filter-name>NoSessionIdFilter</filter-name>
<filter-class>dev.le.tools.servlet.filter.SessionIdFromUrlRemoveFilter</filter-class>
</filter>
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<!-- Spring security filters -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<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>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>mvc-dispatcher</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>charEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>NoSessionIdFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>[/XML]
applicationContext.xml:
[XML]<context:annotation-config />
<context:component-scan base-package="de************" />
<context:component-scan base-package="de************" />
<import resource="datasource-config.xml" />
<import resource="webflow-config.xml" />
<import resource="security-config.xml" />
<mvc:annotation-driven />
<mvc:resources location="/WEB-INF/views/" mapping="/WEB-INF/views/**"/>
<bean id="defaultServletHttpRequestHandler"
class="org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler" />
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
<!-- JSF for representation layer. All JSF files under /WEB-INF/views directory -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="cache" value="false" />
<property name="viewClass" value="org.springframework.faces.mvc.JsfView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".xhtml" />
</bean>
<bean id="userAuthenticationProvider" class="de.wiegand.mytransport.services.impl.UserAuthenticationProvider">
<property name="authenticationManager" ref="authenticationManager" />
</bean>[/XML]
webflow-config.xml:
[XML]<bean id="jpaFlowExecutionListener"
class="org.springframework.webflow.persistence.HibernateFlowExecutionListener">
<constructor-arg ref="sessionFactory" />
<constructor-arg ref="transactionManager" />
</bean>
<bean id="facesContextListener"
class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener" />
<webflow:flow-executor id="flowExecutor">
<webflow:flow-execution-repository
max-executions="0" />
<webflow:flow-execution-listeners>
<webflow:listener ref="facesContextListener" />
<webflow:listener ref="securityFlowExecutionListener" />
</webflow:flow-execution-listeners>
</webflow:flow-executor>
<webflow:flow-registry id="flowRegistry" flow-builder-services="facesFlowBuilderServices" base-path="/WEB-INF/flows">
<webflow:flow-location-pattern value="/**/*-flow.xml" />
</webflow:flow-registry>
<faces:flow-builder-services id="facesFlowBuilderServices"
development="true" />
<faces:resources />
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="order" value="0" />
<property name="flowRegistry" ref="flowRegistry" />
<property name="flowUrlHandler">
<bean class="de.wiegand.mytransport.ui.util.PrettyFlowUrlHandler" />
</property>
</bean>
<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 class="org.springframework.faces.webflow.JsfFlowHandlerAdapter">
<property name="flowUrlHandler">
<bean class="de.wiegand.mytransport.ui.util.PrettyFlowUrlHandler" />
</property>
<property name="flowExecutor" ref="flowExecutor" />
</bean>
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowUrlHandler">
<bean class="de.wiegand.mytransport.ui.util.PrettyFlowUrlHandler" />
</property>
<property name="flowExecutor" ref="flowExecutor" />
</bean>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<bean id="securityFlowExecutionListener"
class="org.springframework.webflow.security.SecurityFlowExecutionListener" />[/XML]
search.xhtml:
SucheController:
DANKE
ich möchte ein existierendes Webflow JSF- Primefaces Projekt um spring mvc via UrlBasedViewResolver erweitern um lesbare urls zu bekommen.
Dummerweise bekomme ich eine
[WR]WARN PageNotFound:183 - Request method 'POST' not supported[/WR]
Warnung wenn mein Suchformular eine ajax oder btn action feuert.
Das zugehörige @ManagedBean wird nicht aufgerufen und der Browserresponse lautet
[WR]HTTP ERROR 405 Problem accessing /app/WEB-INF/views/suche.xhtml. Reason: Request method 'POST' not supported[/WR]
anbei der code:
web.xml:
[XML]
<display-name>My Transport</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:res/conf/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFSULT_SUFFIX</param-name>
<param-value>.xhtml.xml</param-value>
</context-param>
<context-param>
<param-name>faceslets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_RESOLVER_REFRESH_PERIOD</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>hot-sneaks</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>Resources Servlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Resources Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>mvc-dispatcher</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>1</load-on-startup>
</servlet>
<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>mvc-dispatcher</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Push Servlet</servlet-name>
<servlet-class>org.primefaces.push.PushServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Push Servlet</servlet-name>
<url-pattern>/primepush/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter>
<filter-name>NoSessionIdFilter</filter-name>
<filter-class>dev.le.tools.servlet.filter.SessionIdFromUrlRemoveFilter</filter-class>
</filter>
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<!-- Spring security filters -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<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>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>mvc-dispatcher</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>charEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>NoSessionIdFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>[/XML]
applicationContext.xml:
[XML]<context:annotation-config />
<context:component-scan base-package="de************" />
<context:component-scan base-package="de************" />
<import resource="datasource-config.xml" />
<import resource="webflow-config.xml" />
<import resource="security-config.xml" />
<mvc:annotation-driven />
<mvc:resources location="/WEB-INF/views/" mapping="/WEB-INF/views/**"/>
<bean id="defaultServletHttpRequestHandler"
class="org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler" />
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
<!-- JSF for representation layer. All JSF files under /WEB-INF/views directory -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="cache" value="false" />
<property name="viewClass" value="org.springframework.faces.mvc.JsfView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".xhtml" />
</bean>
<bean id="userAuthenticationProvider" class="de.wiegand.mytransport.services.impl.UserAuthenticationProvider">
<property name="authenticationManager" ref="authenticationManager" />
</bean>[/XML]
webflow-config.xml:
[XML]<bean id="jpaFlowExecutionListener"
class="org.springframework.webflow.persistence.HibernateFlowExecutionListener">
<constructor-arg ref="sessionFactory" />
<constructor-arg ref="transactionManager" />
</bean>
<bean id="facesContextListener"
class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener" />
<webflow:flow-executor id="flowExecutor">
<webflow:flow-execution-repository
max-executions="0" />
<webflow:flow-execution-listeners>
<webflow:listener ref="facesContextListener" />
<webflow:listener ref="securityFlowExecutionListener" />
</webflow:flow-execution-listeners>
</webflow:flow-executor>
<webflow:flow-registry id="flowRegistry" flow-builder-services="facesFlowBuilderServices" base-path="/WEB-INF/flows">
<webflow:flow-location-pattern value="/**/*-flow.xml" />
</webflow:flow-registry>
<faces:flow-builder-services id="facesFlowBuilderServices"
development="true" />
<faces:resources />
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="order" value="0" />
<property name="flowRegistry" ref="flowRegistry" />
<property name="flowUrlHandler">
<bean class="de.wiegand.mytransport.ui.util.PrettyFlowUrlHandler" />
</property>
</bean>
<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 class="org.springframework.faces.webflow.JsfFlowHandlerAdapter">
<property name="flowUrlHandler">
<bean class="de.wiegand.mytransport.ui.util.PrettyFlowUrlHandler" />
</property>
<property name="flowExecutor" ref="flowExecutor" />
</bean>
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowUrlHandler">
<bean class="de.wiegand.mytransport.ui.util.PrettyFlowUrlHandler" />
</property>
<property name="flowExecutor" ref="flowExecutor" />
</bean>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<bean id="securityFlowExecutionListener"
class="org.springframework.webflow.security.SecurityFlowExecutionListener" />[/XML]
search.xhtml:
HTML:
<p:fieldset styleClass="fieldset_search" legend="Fahrt suchen">
<h:form id="searchTripForm">
<p:focus />
<h:panelGrid id="searchPanelGrid"
style="margin: 0 auto; margin-top: 25px; text-align: right"
cellspacing="8" columns="3">
<h:panelGroup>
<h:outputText value="Von:" />
<h:outputText style="color:red" value="* " />
</h:panelGroup>
<p:autoComplete id="origin_autocomplete" minQueryLength="3"
rendered="#{empty searchBean.notUniqueOrigins}"
forceSelection="false" queryDelay="300" maxResults="5"
placeholder="PLZ, Stadt oder Statdtteil" charset="UTF-8"
value="#{searchBean.originDisplayNameAndClearGeoLocation}"
required="true" label="Von" title="Absendeadresse eingeben"
tabindex="false"
completeMethod="#{geoNamesService.getGeoNamesByInput}" />
<h:panelGrid rendered="#{!empty searchBean.notUniqueOrigins}"
columns="1">
<h:selectOneMenu
value="#{searchBean.selectedNotUniqueOriginId}"
style="width:200px;" onchange="submit()"
valueChangeListener="#{searchBean.changeSelectedOrigin}">
<f:selectItems value="#{searchBean.notUniqueOrigins}"
var="origin" itemLabel="#{origin.name}, #{origin.zipcode}"
itemValue="#{origin.id}" />
</h:selectOneMenu>
<p:commandLink id="resetOriginToInput" style="margin-right:20px;"
immediate="true" ajax="false" action="resetOriginToInput">
<h:outputText value="zurücksetzen" />
</p:commandLink>
</h:panelGrid>
<h:panelGroup>
<p:message id="originMsg" for="origin_autocomplete" />
<p:tooltip for="origin_autocomplete" styleClass="tooltip"
showEvent="focus" hideEvent="blur" />
</h:panelGroup>
<h:panelGroup>
<h:outputText value="Nach:" />
<h:outputText style="color:red" value="* " />
</h:panelGroup>
<p:autoComplete id="destination_autocomplete" minQueryLength="3"
queryDelay="300"
rendered="#{empty searchBean.notUniqueDestinations}"
forceSelection="false" charset="UTF-8" maxResults="5"
placeholder="PLZ, Stadt oder Statdtteil"
value="#{searchBean.destinationDisplayNameAndClearGeoLocation}"
effect="fade" required="true" label="Nach"
title="Empfängeradresse eingeben"
completeMethod="#{geoNamesService.getGeoNamesByInput}" />
<h:panelGrid
rendered="#{!empty searchBean.notUniqueDestinations}"
columns="1">
<h:selectOneMenu
value="#{searchBean.selectedNotUniqueDestinationId}"
style="width:200px;" onchange="submit()"
valueChangeListener="#{searchBean.changeSelectedDestination}">
<f:selectItems value="#{searchBean.notUniqueDestinations}"
var="destination"
itemLabel="#{destination.name}, #{destination.zipcode}"
itemValue="#{destination.id}" />
</h:selectOneMenu>
<p:commandLink id="resetDestinationToInput" ajax="false"
immediate="true" style="margin-right:20px;"
action="resetDestinationToInput">
<h:outputText value="zurücksetzen" />
</p:commandLink>
</h:panelGrid>
<h:panelGroup>
<p:message id="destinationMsg" for="destination_autocomplete" />
<p:tooltip for="destination_autocomplete" styleClass="tooltip" showEvent="focus" hideEvent="blur" />
</h:panelGroup>
</h:panelGrid>
SucheController:
Java:
@RequestMapping(value="/", method=RequestMethod.GET)
public ModelAndView init() {
ModelAndView mav = new ModelAndView("suche*");
return mav;
}
@RequestMapping(value="/suche*", method = RequestMethod.GET)
public ModelAndView search(HttpServletRequest request) {
ModelAndView mav = new ModelAndView("views/suche");
return mav;
}
@RequestMapping(value="/suche*", method = RequestMethod.POST)
public ModelAndView _search(SearchRequestBean searchBean, Model model) {
ModelAndView mav = new ModelAndView("views/suche");
return mav;
}
@RequestMapping(value="/detail*", method=RequestMethod.GET)
public ModelAndView detail() {
ModelAndView mav = new ModelAndView("views/detail");
return mav;
}
DANKE