通常,您的JSF应用程序将需要超越基本的静态导航并开始做出动态导航决策。 例如,您可能想根据用户的年龄重定向他们。 大多数JSF教程建议通过将命令的action属性绑定到支持bean来实现动态导航:

<h:commandButton action="#{bean.actionBasedOnAge}"/>
public String actionBasedOnAge() {if(age &lt; 12) {return "fetchadult";} else {return "ok"}
}

上面的示例显示了十二岁以下的人如何被定向到'fetchadult'而不是通常的'ok''fetchadult''ok'结果都需要在faces-config.xml定义导航规则,以便JSF知道要显示的实际页面。

使用Spring MVC时,将导航逻辑包含在@Controller bean中通常更为自然。 为了解决这个问题,从MVC渲染JSF时,隐式的'controller''handler'变量可用。 'controller'变量提供对映射到原始请求的控制器bean的访问,并提供对基础MVC处理程序的'handler'变量的访问。 在Spring 3.0中, 'controller''handler'通常是同一对象。 但是,在Spring 3.1中,底层的MVC体系结构正在发生变化 , 'handler'通常是org.springframework.web.method.HandlerMethod实例。

这是一个引用@ControllersomeNavigation()方法的提交按钮:

<h:commandButton action="#{controller.someNavigation"/>

虽然访问控制器bean很有用,但它不是理想的解决方案。 我更喜欢在我的JSF页面中使用逻辑名并映射那些Java方法。 我还想要一种简单的方法来从基础模型中获取数据。

@NavigationMapping批注提供了另一种更灵活的导航方法。 它的工作方式与@RequestMappings非常相似。 注释可以放在@Controller任何公共方法上,以将导航结果映射到目的地。

<h:commandButton action="submit"/>
@NavigationMapping
public String onSubmit() {return "redirect:http://www.springsource.org";
}

如果您需要访问支持bean,则可以使用标准的Spring @Value注释。 页面可以解析的任何EL表达式也可以在导航方法参数上使用。

@NavigationMapping
public String onSubmit(@Value("#{person.age}") int age) {
...
}

访问模型元素甚至更加容易。 只要您只有一个要在模型中访问的类型的对象,并且它不是简单类型(int,String等),就不需要任何注释:

@NavigationMapping
public String onSubmit(Person p) {
...
}

也可以使用其他参数类型(有关完整列表,请参见JavaDoc)。 例如,这是一个导航映射,处理'submit''cancel''save'结果。 注入的参数告诉我们单击了三个结果中的哪个,并提供了对源UIComponent访问。

@NavigationMapping('submit','cancel','save')
public String handleNavigation(String outcome, UIComponent source) {
...
}

返回类型也同样灵活。 您可以返回视图名称作为String S,你也可以使用相同的"@hotelsController.show"符号,我以前的博客上讲述 。 您也可以直接返回View object ,或者如果要包含隐式模型项,则可以使用NavigationOutcome

最后,如果只想呈现即时响应,则可以使用@ResponseBody批注或返回HttpEntity 。 它的工作方式与Spring完全相同。

参考: 集成Spring和JavaServer Faces:来自Phil Webb博客博客中的JCG合作伙伴 Phillip Webb的动态导航 。

翻译自: https://www.javacodegeeks.com/2012/05/spring-jsf-integration-dynamic.html

Spring和JSF集成:动态导航相关推荐

  1. Spring和JSF集成:导航

    我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇. 这里提到的所有内容都是"正在进行中的工作",因此,如果您签出代码,请 ...

  2. jsf集成spring_Spring和JSF集成:导航

    jsf集成spring 我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇. 这里提到的所有内容都是"正在进行中的工作", ...

  3. Spring和JSF集成:转换器

    使用任何Web框架时,都不可避免地需要将用户输入的数据从String为其他类型. 尽管Spring和JSF在设计和功能上确实有很大的不同,但它们都具有转换器策略来处理此问题. 让我们从春天开始. Sp ...

  4. Spring和JSF集成:MVC螺母和螺栓

    过去,我曾尝试将JSF与Spring MVC集成在一起,尽管我的第一次尝试成功了,但这远非理想. 这次,我决定做出一些关键决定来帮助我集中精力: 向后兼容. 支持JSF 1.2涉及的工作太多,而Spr ...

  5. Spring和JSF集成:选择项目

    使用JSF,要使用组合框,列表框和复选框,您需要了解javax.faces.model.SelectItem类. SelectItem表示单个可选选项. 它既包含渲染所需的信息,又包含选择该项目时应绑 ...

  6. Spring和JSF集成:异常处理

    大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要的. 通常,在用库存JS ...

  7. Spring和JSF集成:分页

    处理大型数据集时,通常需要以分页格式显示数据. 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用. 在获取分页数据时,有一些非常好的解决方案. ...

  8. Spring和JSF集成:国际化和本地化

    如果您正在开发针对多种语言的JSF应用程序,那么您可能很熟悉<f:loadBundle>标记. 即使您的应用程序不支持使用消息包的国际化仍然是一个好主意. 在<f:loadBundl ...

  9. jsf集成spring_Spring JSF集成

    jsf集成spring Welcome to Spring JSF integration tutorial. JSF is a component based framework with grea ...

最新文章

  1. 前端的一些常用DOM和事件归纳
  2. mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析
  3. Spring容器与上下文理解
  4. Qt Widgets、QML、Qt Quick的概念与区别
  5. 政府公务办公安全保密邮件系统建设
  6. mongodb转实体对像_营销案例丨实体店走出门面冷清的方法:打造体验式门店
  7. bzero和memset函数比较
  8. 扫描二维码登录的接口
  9. 【算法】路径规划中的Dijkstra(狄克斯特拉)与A星算法
  10. 计算机上的符号在哪找,像w的那个符号在哪里可以找到?word文档
  11. Oracle 官方文档在线查看Oracle函数
  12. python实现Kmeans算法
  13. 新胖子公式(java)
  14. 哪吒之魔童降世视听语言影评_《哪吒之魔童降世》观后感精彩影评5篇450字
  15. oracle rac mpp,DB2 purescale vs Oracle RAC
  16. C/C++黑魔法-利用include宏读文件
  17. 510758-19-7,5-FAM-Alkyne高选择性和灵敏的荧光生物标记物,可用于标记碱性磷酸酶 (ALP)
  18. 三维扫描技术在精密注塑件尺寸检测中的应用
  19. oracle的mysql_Oracle与MySQL的区别简析
  20. 解决selenium与chrome版本不匹配问题

热门文章

  1. 会话技术Session
  2. mysql中使用CASE WHEN
  3. pbfunc外部扩展函数_从外部CorDapp扩展和覆盖流
  4. spring boot分层_只需5分钟即可启动并运行分层架构:: Spring Boot第1部分
  5. neo4j cypher_Neo4j:Cypher –避免热切
  6. 我可以/应该在事务上下文中使用并行流吗?
  7. 1.0jpa 2.0_JPA 2.1实体图–第1部分:命名实体图
  8. HOW-TO:具有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler
  9. 从响应式Spring Data存储库流式传输实时更新
  10. nodemanager_如何使用NodeManager来控制WebLogic Server