jsf集成spring_Spring和JSF集成:动态导航

jsf集成spring

通常,您的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博客Blog的 JCG合作伙伴 Phillip Webb的动态导航


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

jsf集成spring

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值