我尝试了一个愚蠢的解决方案,它使用两个“DispatcherServlets”来使用 facelets 作为 Spring MVC Web 应用程序的视图技术,这暂时很好,facelets 页面可以从控制器获取模型,问题是当 facelets 页面发送一个表单对象,这是这个 Web 应用程序的设置方式:
网页.xml:
<servlet>
<servlet-name>Example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/mvc-config.xml</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>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Example</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
使用此配置,此控制器的方法可以正常工作:
@RequestMapping(value = "/garage", method = RequestMethod.GET)
public ModelAndView get(){
ModelAndView mav = new ModelAndView() ;
mav.setViewName("/faces/garage.xhtml") ;
mav.addObject("listOfCars", carService.getCarList()) ;
mav.addObject("hello", "Hello World From Spring Controller") ;
return mav ;
}
此应用程序中的问题是,在提交表单时,jsf 标签总是试图解析“faces/*.xhtml”视图。像这样的解决方案根本不会改变任何东西。
<h:form>
<p>
<h:inputText
id="carMarque"
title="Quelle est la marque du nouveau véhicule"
value="#{NewCar.marque}">
</h:inputText>
<h:commandButton id="submit" value="Ajouter" action="/garage/new" />
</p>
</h:form>
它只是以 ServletException 结束
javax.servlet.ServletException: /newcar.xhtml @22,50 value="#{NewCar.marque}": Target Unreachable, identifier 'NewCar' resolved to null
我不知道有没有办法解决这个问题。