jsf tree组件_JSF和“立即”属性–命令组件

jsf tree组件

JSF中的即时属性通常被误解。 如果您不相信我,请查看Stack Overflow 。 造成混淆的部分原因可能是由于输入(即<h:inputText />)和命令(即<h:commandButton />)组件都立即可用,每个组件对JSF生命周期的影响都不同。

这是标准的JSF生命周期:

出于本文的目的,我假设您熟悉JSF生命周期的基础知识。 如果您需要简介或内存更新,请查看Java EE 6教程– JavaServer Faces应用程序的生命周期 。

注意:本文中的代码示例适用于JSF 2(Java EE 6),但其原理与JSF 1.2(Java EE 5)相同。

在Command组件上为Instant = true

标准 JSF生命周期中,在“ 调用应用程序”阶段评估Command组件上的action属性。 例如,假设我们有一个User实体/ bean:

public class User implements Serializable {@NotBlank@Length(max = 50)private String firstName;@NotBlank@Length(max = 50)private String lastName;/* Snip constructors, getters/setters, a nice toString() method, etc */
}

还有一个UserManager用作我们的托管bean:

@SessionScoped
@ManagedBean
public class UserManager {private User newUser;/* Snip some general page logic... */public String addUser() {//Snip logic to persist newUserFacesContext.getCurrentInstance().addMessage(null,new FacesMessage("User " + newUser.toString() + " added"));return "/home.xhtml";}

还有一个基本的Facelets页面newUser.xhtml ,以呈现视图:

<h:form><h:panelGrid columns="2"><h:outputText value="First Name: " /><h:panelGroup><h:inputText id="firstName"value="#{userManager.newUser.firstName}" /><h:message for="firstName" /></h:panelGroup><h:outputText value="Last Name: " /><h:panelGroup><h:inputText id="lastName" value="#{userManager.newUser.lastName}" /><h:message for="lastName" /></h:panelGroup></h:panelGrid><h:commandButton value="Add User" action="#{userManager.addUser()}" />
</h:form>

所有这些结合起来产生了这种可爱的形式:

当用户单击“ 添加用户”按钮时,将在“ 调用应用程序”阶段调用 #{userManager.addUser} 。 这是有道理的,因为我们希望在持久保存输入字段之前先对其进行验证,转换并将其应用于newUser。

现在,让我们在页面上添加一个“取消”按钮,以防用户改变主意。 我们将在页面中添加另一个<h:commandButton />:

<h:form><!-- Snip Input components --> <h:commandButton value="Add User" action="#{userManager.addUser()}" /><h:commandButton value="Cancel" action="#{userManager.cancel()}" />
</h:form>

以及UserManagercancel()方法:

public String cancel() {newUser = new User();FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Cancelled new user"));return "/home.xhtml";
}

看起来不错吧? 但是,当我们实际尝试使用“取消”按钮时,会收到错误消息,提示您需要输入名字和姓氏:

这是因为#{userManager.cancel}直到在流程验证阶段之后发生的“ 调用应用程序”阶段才被调用 ; 由于我们没有输入名字和姓氏,因此在调用#{userManager.cancel}之前验证失败,并且在“ 过程验证”阶段之后呈现响应。

我们当然不希望最终用户在取消之前输入有效用户! 幸运的是,JSF在Command组件上提供了即时属性。 当直接设置为true的命令组件上,行动调用的应用请求值阶段:

这非常适合我们的“取消”用例。 如果我们将Instant = true添加到Cancel,则在进行任何验证之前,将在Apply Request Values阶段调用# {userManager.cancel}

<h:form>  <!-- Snip Input components --><h:commandButton value="Add User" action="#{userManager.addUser()}" /><h:commandButton value="Cancel" action="#{userManager.cancel()}" immediate="true" />
</h:form>

因此,现在单击“取消”时,将在“ 应用请求值”阶段中调用#{userManager.cancel} ,并通过预期的取消消息返回首页。 没有验证错误!


输入组件也具有即时属性,该属性还将其所有逻辑移至“ 应用请求值”阶段。 但是,其行为与Command组件略有不同,特别是取决于对Input组件的验证是否成功。 我的下一篇文章将介绍Input组件上的Instant = true 。 现在,这里是JSF生命周期如何受到影响的预览:

参考: JSF on Java博客上的 JSF和“立即”属性–命令组件,来自我们的JCG合作伙伴 Jerry Orr。


翻译自: https://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html

jsf tree组件

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

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

相关文章

笔记本电脑电池显示4%可用(已接通电源),经过清灰又莫名奇妙的可以续航啦,很奇怪!

公司的办公电脑&#xff0c;估计是转手租用好几年了&#xff0c;今天打开一看电池一直充电充不进去。刚开始一直充电显示笔记本电脑电池显示7%可用&#xff0c;等会断电打开笔记本电脑电池显示4%可用。我已经感觉电池坏了&#xff0c;然后我感觉电脑好久没有清灰了&#xff0c;…

call()和apply()方法(切换上下文)

call方法: 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象。 apply方法&#xff1a; 语法&#xff1a;apply([thisObj[,argArray]]) 定义&#xff1a;应用某一对象的一个方法&…

python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址

随着人们生活水平的提高&#xff0c;肯德基这类的快餐消费的十分火爆&#xff0c;成为小朋友和年轻人的最爱&#xff0c;我们到一个地方想要找到肯德基店面&#xff0c;会根据导航获取肯德基地址&#xff0c;那你知道我们也可以使用python爬虫获取KFC地址吗&#xff1f;我们可以…

使用Java 8 CompletableFuture和Rx-Java Observable

我想使用Java 8 CompletableFuture和Rx-Java Observable探索一个简单的分散聚集场景。 场景很简单–产生大约10个任务&#xff0c;每个任务返回一个字符串&#xff0c;最终将结果收集到一个列表中。 顺序的 其顺序版本如下&#xff1a; public void testSequentialScatterGa…

百度网盘限速解决方案

解决各种网盘工具的助手,解决百度网盘限速的解决办法。 KinhDown 官网:https://kinhdown.kinh.cc/ KinhDown 支持百度网盘 Windows、安卓,可以免登录解除部分百度网盘资源限速问题。 下载 雷鸟下载 雷鸟下载是一款基于多资源超线程技术的下载软件,雷鸟下载针对各类网盘做…

hdu 2028

PS:以前对long long型的数据就一直不怎么明白...弄了好久... long long a; scanf("%lld",&a); printf("%lld",a); 这样才行 代码:#include "stdio.h"void swap(long long *a,long long *b){ long long t; t*a; *a*b; *bt;}long long gcd(lon…

MyEclipes+JSP+SSH+MySQL实现一个文章发布系统

导读:随着计算机技术的迅速发展,网络正以一种前所未有的冲击力影响着人类的生产和生活。网络的快速发展,颠覆了传统的信息传播方式,冲破了传统的时间,空间的局限性,继而引发了人类阅读方式的变革。现如今,网络阅读已成为一种新的时尚,在这种趋势下,文章发布系统应运而…

zblog php 侧边栏样式,ZBlogPHP免费主题Blogs如何修改侧边栏搜索框样式?

老古偶尔访问有某些使用 ZBlogPHP 免费主题 Blogs 的站点&#xff0c;发现他们的侧边栏搜索框样式都比较丑&#xff0c;一看就知道这些站长都没有认真阅读Blogs 主题介绍页&#xff0c;因为介绍页中的第四大点侧边栏模块使用第 5 小点就介绍了如何修改侧边栏搜索框样式。下图左…

BZOJ 3511 土地划分

AC通道&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3511 题目分析&#xff1a; 看上去和前面的人员雇佣以及小M种田都很像。 最小割模型来求最大值&#xff0c;一般都是考虑怎样构图使得满足一个组合能被表示出来&#xff0c;而且当满足一个组合的时候&#…

MyEclipes+html+jsp+mysql实现一个物流信息网

导读:该系统使用java语言开发,使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好,用户可以自行选择服务。用户可以查询快递的详细信息以…

oracle pl/sql编程详解,OraclePL/SQL高级编程详解

–创建一个表&#xff0c;此表作为子表create table fk_t as select *from user_objects;delete from fk_t where object_id is null;commit;–创建一个表&#xff0c;此表作为父表create table pk_t as select *from user_objects;delete from pk_t where object_id is null;c…

使用Unsafe真的是关于速度或功能吗?

总览 大约6年前&#xff0c;我开始使用一个类&#xff0c;直到那时&#xff0c;它只是一个好奇心sun.misc.Unsafe 。 我曾使用它进行反序列化和重新抛出Exception&#xff0c;但没有使用它的全部功能或公开谈论它。 我看到的第一个严重使用Unsafe的开源库是Disruptor。 这使我…

css全局设置

/***** 全局设置 *****/body,h1,h2,h3,h4,h5,h6,p,form,ul,ol,li,dt,dl,dd,th,td,label,bottom,input,textarea{ margin:0;padding:0;}body{font-family:"宋体", arial;font-size:12px;line-height:1.5;text-align:left;background:#FFF;color:#000;}h1,h2,h3,h4,h5,…

MyEclipes+JSP+tomcat+MySQL实现JavaEE平台项目管理系统

导读:随着社会信息化的发展,很多的社会管理问题也一并出现了根本性变化,项目公司的报表及文件管理也发生了变化,以前的管理是一个分布式的信息,然后围绕中心由通过简单的来传输信息,这使得办事效率非常低下,所以需要需要适用信息货的发展,开发一套项目的管理信息系统。…

可以升级oracle版本吗,怎么升级oracle版本

Oracle数据库升级也并非简单的事&#xff0c;这篇文章对Oracle那点事做了较详细的介绍&#xff1a;Oracle数据库升级或数据迁移方法研究我还属于Oracle的菜鸟&#xff0c;就不献丑介绍了。下面我就简单总结下,Oracle同版本升级的经历:升级数据库&#xff1a;1. 先检查数据库当前…

Mac OS X下安装nvm的方法

最近准备学习一下node.js&#xff0c;到youtube上搞了些视频回家看。结果在ubuntu上面安装nvm都ok了&#xff0c;坑货mac搞不定。 经过不断尝试&#xff0c;google&#xff0c;youtube&#xff0c;终于发现了如何搞定。现特将步骤记录&#xff0c;聊以自慰。 安装node.js原本需…

Myesclipe+SSH+jsp+mysql+tomcate实现一个简单的CRM客户关系管理系统

导读: CRM客户关系管理系统的目的通过客户管理,产品管理,系统管理等功能同客户建立联并收集客户信息,此基础上满足客户"一对一"个性化服务。同时信息在企业的流程上得以流转,让客户得到高效的,满意的服务。本系统包括信息管理、客户管理、产品管理等多项功能。…

adf平稳性检测_ADF声明性组件示例

adf平稳性检测在我以前的文章中&#xff0c;我答应展示如何为智能值列表创建ADF声明性组件。 因此&#xff0c;我将创建一个包含三个元素的组件&#xff1a;标签&#xff0c;输入文本和值的组合框列表。 那很容易。 我在工作空间中创建了一个单独的ADF ViewController项目&…

oracle 计算中位数,SQL 如何计算每个分组的中位数

中位数是指一组数据排序以后&#xff0c;位于中间位置的数据值。如果数据个数是奇数&#xff0c;中位数就是最中间位置那个值&#xff1b;如果是偶数&#xff0c;则是中间位置那两个数的平均值。怎么查询出数据分组以后每个组的中位数呢&#xff1f;用SQL来解决这个问题是很有难…

OA学习笔记-006-SPRING2.5与hibernate3.5整合

一、为什么要整合 1&#xff0c;管理SessionFactory实例&#xff08;只需要一个&#xff09; 2&#xff0c;声明式事务管理 spirng的作用 IOC 管理对象.. AOP 事务管理.. 二、整合步骤 1.整合sessionFactory 在applicationContext.xml添加 1 <!-- 导入外部的properties文件 …