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>
以及UserManager的cancel()方法:
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组件
jsf tree组件_JSF和“立即”属性–命令组件相关推荐
- JSF和“立即”属性–命令组件
JSF中的即时属性通常被误解. 如果您不相信我,请查看Stack Overflow . 造成这种混乱的部分原因可能是输入(即<h:inputText />)和命令(即<h:comma ...
- jsf tree组件_JSF UI组件标签属性示例教程
jsf tree组件 JSF provides a wide variety of ui component tags along with a long range of attributes. T ...
- jsf tree组件_JSF表单组件示例教程
jsf tree组件 JSF Form component is a collection of fields along with the data and submit functionality ...
- jsf tree组件_JSF文本组件–标签,文本字段,文本区域和密码
jsf tree组件 The Text components allows the user to add, view and edit data in a form of a web applica ...
- jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择
jsf tree组件 这篇博客文章起源于一个大型Web应用程序中的性能问题. 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码. 奇怪,因为在客户端有很多改进的空间. 我会说,甚 ...
- jsf用于页面判断的标签_用于操作和导航的JSF命令组件标签
jsf用于页面判断的标签 JSF provides two command component tags for performing action and navigation. They are ...
- jsf刷新页面_JSF页面生命周期管理
jsf刷新页面 When the user requests for a page, the lifecycle of JSF begins. JavaServer faces builds the ...
- jsf面试题_JSF面试问答
jsf面试题 I have written a lot on JSF framework recently, so it's high time I write one on JSF intervie ...
- vue脚手架的安装、生命周期、文件导入格式、局部组件和全局组件、动态添加属性和方法、插槽、传值
----------------------------------- DOS命令 进入dos: win+r 切换盘符: d: 查看: dir 打开文件夹: cd 文件夹的名字 返回上一级目录 ...
最新文章
- UOJ46. 【清华集训2014】玄学
- MATLAB 线型 颜色 和 标记点组合使用
- 构建基于分布式SOA架构的统一身份认证体系
- SQL转换函数(CAST 和 CONVERT)
- 带你掌握4种Python 排序算法
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- 尚硅谷设计模式-观察者模式
- JAVA的if用法比如if(...){} 和if()没有区别
- 凸优化第五章对偶 5.5 最优性条件
- Magento报错之SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry for key 1
- 金特会谈:有骨气的人,才会被人尊重
- mysql 登录 无密码_重置mysql的密码/无密码登录mysql
- 定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。
- 疫情重压下,屈臣氏为何上半年仍盈利?
- 鸿图之下服务器维护10月25,鸿图之下11月25日维护更新公告
- 哪里东西更便宜?读《卧底经济学(珍藏版)》
- 公文管理系统案例展示
- 分享129个ASP源码,总有一款适合您
- python余弦定理_余弦定理与文本相似度
- 王菲语法11 动词(非谓语动词)
热门文章
- 大二暑假工作三个月后辞职,总体感悟
- ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that
- 三个水桶(看了三遍,想了五遍!)
- Servlet 中文乱码处理
- 深入理解python的元组本身不可变性
- 电脑基本快捷键的使用
- linux跑循环脚本占内存,Linux下实现脚本监测特定进程占用内存情况
- javafx查找子节点_JavaFX技巧29:使布局忽略不可见的节点
- java登录界面命令_Java命令行界面(第30部分):观察
- 黑马2016java_2016年成功的Java开发人员简介