Spring和JSF集成:动态导航

通常,您的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过富文本改变UITextFieldPlaceholder颜色

1、通过属性 a、 //文字属性(一般) NSMutableDictionary *attrs [NSMutableDictionary dictionary]; attrs[NSForegroundColorAttributeName] [UIColor blueColor]; NSAttributedString *placeholderStr [[NSAttributedString alloc] initWithString:"手机号" a…

阻塞/非阻塞/同步/异步方法和多线程的关系?没有任何关系,俩不挨着

1.阻塞非阻塞异步同步是针对方法说的&#xff0c;是评判一个方法运行状态的。和多线程完全两个级别。 2.阻塞非阻塞异步同步是针对方法说的&#xff0c;是评判一个方法运行状态的。和多线程完全两个级别。 3.阻塞非阻塞异步同步是针对方法说的&#xff0c;是评判一个方法运行状…

mysql备份 where_MySQL备份与还原

1.mysqldumpmysqlbinlog介绍mysqldump备份结合binlog日志恢复。MySQL备份一般采取全库备份加日志备份的方式&#xff0c;例如每天执行一次全备份&#xff0c;每小时执行一次二进制日志备份&#xff0c;这样在MySQL故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志…

JMeter:负载测试关系数据库

Apache JMeter是完全使用Java编写的性能测试工具。 可以在请求/响应模型上运行的任何应用程序都可以使用JMeter进行负载测试。 关系数据库也不例外&#xff1a;接收sql查询&#xff0c;执行它们并返回执行结果。 我将向您展示使用JMeter的图形用户界面设置测试方案有多么容易。…

new: Set up a window

Nehe的教程确实太老了&#xff0c;不过我认为它也能够让我了解OpenGL3.2以前的管线渲染模式&#xff0c;即使它在现在已经不常见了。因为想要了解&#xff0c;所以我还是会看完Nehe的教程。 现在这是一个新的教程 - JoeyDeVries的教程&#xff0c;可以说是网上最好的OpenGL教程…

Python全栈开发:socket

Socket socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文件”&…

oracle sga pga mysql_修改Oracle数据库SGA和PGA大小

SGA的大小&#xff1a;一般物理内存20%用作操作系统保留&#xff0c;其他80%用于数据库。SGA普通数据库可以分配40%-60%之间&#xff0c;PGA可以分配20%-40%之间。1、以dba身份登录并查看SGA信息&#xff1a;SQL>show parameter sga&#xff1b;查看PGA信息&#xff1a;SQL&…

NetBeans 7.1:创建自定义提示

我已经在帖子中介绍了一些我最喜欢的NetBeans提示 &#xff0c;这些信息是用于使Java代码现代化的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是&#xff0c;由于NetBeans 7.1使…

今年暑假不AC

Problem Description “今年暑假不AC&#xff1f;”“是的。”“那你干什么呢&#xff1f;”“看世界杯呀&#xff0c;笨蛋&#xff01;”“#$%^&*%...”确实如此&#xff0c;世界杯来了&#xff0c;球迷的节日也来了&#xff0c;估计很多ACMer也会抛开电脑&#xff0c;奔向…

qregexp括号匹配_转:Qt的正则表达式和QRegExp

考虑一下我们经常遇到的问题&#xff0c;比如gemfield想从青岛之光读书(www.civilnet.cn/book)中找一个关键的电话号码&#xff0c;通常第一步就是将书中所有的电话号码查找出来放在手边。那么怎么拟定查询条件呢&#xff1f;电话的格式有如下几种&#xff1a;01088888888010 8…

具有Tron效果的JavaFX 2 Form

这是一个具有TRON效果的简单JavaFX登录表单。 在此示例中&#xff0c;我使用CSS设置TextField和Button的样式。 这是CSS和Effect代码的片段&#xff1a; .text-field{-fx-background-color: transparent;-fx-border-color: #00CCFF;-fx-text-fill: white; }.password-field{-fx…

Spring注解Annotion详解

概述 注释配置相对于 XML 配置具有很多的优势&#xff1a; 它可以充分利用 Java 的反射机制获取类结构信息&#xff0c;这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时&#xff0c;我们就不需要指定 PO 的属性名、类型等信息&#xff0c;如果关系表字段和 PO…

CopyOnWrite容器

1.简介 1.CopyOnWrite是程序优化的策略,当共享的内容需要修改时,复制出去一份进行修改,然后将原来的引用指向修改完的 2.java并发包(java.util.concurrent)中CopyOnWriteArrayList和CopyOnWriteArraySet实现了这个并发容器 3.好处:因为写时是在复制的一份上操作,所以可以并发的…

Akka的字数统计MapReduce

在我与Akka的日常工作中&#xff0c;我最近写了一个字数映射表简化示例。 本示例实现了Map Reduce模型&#xff0c;该模型非常适合横向扩展设计方法。 流 客户端系统&#xff08;FileReadActor&#xff09;读取文本文件&#xff0c;并将每一行文本作为消息发送给ClientActor。…

mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法

软件安装&#xff1a;装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集&#xff0c;是一种功能齐全的数据库语言。在使用它时&#xff0c;只需要发出“做什么”的命令&#xff0c;“怎么做”是不用使用者考虑的。SQL功…

python学习笔记 可变参数关键字参数**kw相关学习

在Python中可以定义可变参数&#xff0c;顾名思义&#xff0c;可变参数就是传入参数是可变的。可以是任意个&#xff0c;以一个简单的数学编程为例&#xff0c;计算 sum a * a b * b .....z * z 函数定义可以如下&#xff1a; def getsum(num) :sum 0for n in num :sum su…

Struts2之环境配置

在学习struts2之前&#xff0c;首先我们要明白使用struts2的目的是什么&#xff1f;它能给我们带来什么样的好处&#xff1f; 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势 Struts2有两方面的技术优势&#xff0c;…

mysql数据库备份shell_mysql数据库备份shell脚本分享

#!/bin/bash#2020年04月27日15:56:21#auto backup mysql db#by author www.cnbugs.com########################SQL_DB"$*"SQL_USR"backup"SQL_PWD"123456"SQL_CMD"/usr/bin/mysqldump"SQL_DIR"/data/backup/date %F"if [ $…

懒惰的JSF Primefaces数据表分页–第1部分

今天&#xff0c;我们将使用带有视图范围的托管bean的惰性列表进行JSF数据表分页。 这些单词/表达式是什么意思&#xff1f; 如今&#xff0c;有几个JSF框架为数据表提供现成的分页&#xff0c;列排序器和其他功能。 今天&#xff0c;我们将使用Primefaces数据表。 通常&#…

java 动态增加定时任务

直接上代码 import org.apache.tools.ant.util.DateUtils; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory;import java.util.Calendar; import…