西安电子科技大学信息化建设处网站,wordpress 分类 别名,网络营销策划有哪些,网站建设需要注意什么jsf集成spring我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇。 这里提到的所有内容都是“正在进行中的工作”#xff0c;因此#xff0c;如果您签出代码#xff0c;请注意它是一个不断变化的目标。 期待一些粗糙的边缘#xff… jsf集成spring 我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇。 这里提到的所有内容都是“正在进行中的工作”因此如果您签出代码请注意它是一个不断变化的目标。 期待一些粗糙的边缘如果有时会断裂不要感到惊讶。 您已经可以很轻松地将Spring与JSF结合使用Spring可以管理bean而JSF可以处理屏幕。 Spring Web Flow中还对JSF提供了一些非常好的支持如果您正在做任何基于流的应用程序那么您确实应该使用Web Flow。 Web Flow还提供org.springframework.faces.mvc. JsfView类使您可以从Spring MVC呈现JSF页面。 不幸的是 JsfView仅呈现瞬态无状态视图如果您想处理回发则JsfView走运。 允许Spring MVC渲染可以处理回发的JSF视图一直是我启动该项目的主要动力。 得益于MVC和JSF的灵活性完全可以集成这些技术尽管关于如何最好地保存其他帖子的确切细节。 我想在本文的其余部分中讨论如何创建非常好的JSF导航。 如果您使用了标准的JSF导航则可能已经习惯了faces-config.xml的以下类型的事情 navigation-rulefrom-view-id/pages/list.xhtml/from-view-idnavigation-casefrom-outcomeselect/from-outcometo-view-id/pages/details.xhtml/to-view-idredirect//navigation-case
/navigation-rule 虽然很容易理解但是对于标准方法来说标准方法存在一些明显的缺点因为它非常冗长。 大多数时候我想重定向我的用户而不是让他们对URL为什么显示与当前页面不同的东西感到困惑。 实际上在每个元素上都需要redirect/确实很烦人。 XML的数量显然使JSF的开发人员感到不安幸运的是JSF 2.0引入了隐式导航的概念。 这是我们稍后将使用的东西。 如果您想阅读有关JSF导航的非常好的文章请使用Dan Allen撰写的JSF 2中的Fluent Navigation 。 导航实际上与目的地有关将某人重定向到404 page not found错误没有多大意义。 对于JSF而言创建漂亮的可读URL目标始终是一件艰苦的事情。 现在在不开发自己的代码的情况下创建可读URL的最佳选择可能是使用PrettyFaces 。 当然通过将JSF和Spring很好地集成在一起您无需使用RequestMapping注释以外的任何其他方法来创建可读的URL。 下面的示例演示如何映射一个可读的URL以显示ID中的酒店详细信息。 Controller
public class HotelsController {RequestMapping(value /hotels/{id}, method RequestMethod.GET)public String show(PathVariable Long id, Model model) {model.addAttribute(bookingService.findHotelById(id));return hotels/show;}
} 有了RequestMapping批注我们可以再次考虑导航。 通常 h:commandButton h:button h:commandLink或h:link组件将用于触发导航例如 h:commandButton valueGo actionselect 在此当用户单击Go按钮时 select动作开始并且导航规则用于查找目的地。 当我们要远离定义导航XML时我们需要一种替代方法来查找MVC目标。 稍微颠覆JSF对隐式导航的支持为我们提供了一种很好的方法。 通过一些集成代码我们可以支持特殊的spring:前缀该前缀告诉JSF使用Spring MVC解析目标。 h:commandButton valueGo actionspring:redirect:/spring/hotels/123/ 上面的示例将使用在Spring MVC中注册的ViewResolver来解析redirect:/spring/hotel/123 。 在这种情况下 UrlBasedViewResolver将选择redirect:并将使用RedirectView 。 很好但是将酒店ID 123硬编码到视图名称中并不实际。 幸运的是有一个答案 h:commandButton valueGo actionspring:redirect:/spring/hotels/{id}f:param nameid value#{resultItem.id}/
/h:commandButton commandButton所有f:param子标记将用于构造MVC视图的模型。 在这种情况下我们得到一个包含“ id#{resultItem.id} ”的模型。 EL值表达式#{resultItem.id}将在呈现视图之前解析。 Spring 3.1中的RedirectView类将处理URL模板变量因此“ /spring/hotels/{id} ”将选择“ id ”以呈现完整的URL。 使用上述方法的一点烦恼是您需要在XHTML文件以及RequestMapping批注中定义URL。 作为替代方案您可以使用特殊的“ bean.method ”符号表示您要导航到指定控制器bean方法上的RequestMapping的值 h:commandButton valueGo actionspring:hotelsController.showf:param nameid value#{resultItem.id}/
/h:commandButton 如果在控制器bean上有多个RequestMapping方法则可以使用甚至更短的语法“ method ”此处假定该bean是当前处理程序在它们之间进行导航。 当然并非每种类型的RequestMapping都可以反向转换为URL例如如果您使用通配符则此操作将无效。 建议是使您的映射尽可能简单。 这种方法的最后一个好处是我们还可以逆转DataBinder过程。 例如 public class SearchCriteria implements Serializable {private String searchString;private int page;// ... getters / setters
}RequestMapping(value /hotels)
public String list(SearchCriteria criteria, Model model) {// ...
}h:link outcomespring:listf:param namesc value#{searchCriteria}/
/h:link 假设#{searchCriteria} EL表达式解析为包含字符串California的SearchCriteria对象并且所构建的URL的整数10将为/spring/hotels?searchStringCaliforniapage10 。 如果您想查看该项目的代码可以在http://github.com/philwebb/springfaces上找到它。 如文章顶部所述此代码尚在开发中因此请注意一些问题。 路线图上的下一个任务是支持NavigationMapping批注该批注将允许以编程方式进行导航。 参考 集成Spring和JavaServer Faces JCG合作伙伴 Phillip Webb的 导航 在Phil Webb的Blog上 。 翻译自: https://www.javacodegeeks.com/2012/03/spring-jsf-integration-navigation.htmljsf集成spring