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组件

jsf tree组件_JSF和“立即”属性–命令组件相关推荐

  1. JSF和“立即”属性–命令组件

    JSF中的即时属性通常被误解. 如果您不相信我,请查看Stack Overflow . 造成这种混乱的部分原因可能是输入(即<h:inputText />)和命令(即<h:comma ...

  2. jsf tree组件_JSF UI组件标签属性示例教程

    jsf tree组件 JSF provides a wide variety of ui component tags along with a long range of attributes. T ...

  3. jsf tree组件_JSF表单组件示例教程

    jsf tree组件 JSF Form component is a collection of fields along with the data and submit functionality ...

  4. jsf tree组件_JSF文本组件–标签,文本字段,文本区域和密码

    jsf tree组件 The Text components allows the user to add, view and edit data in a form of a web applica ...

  5. jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择

    jsf tree组件 这篇博客文章起源于一个大型Web应用程序中的性能问题. 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码. 奇怪,因为在客户端有很多改进的空间. 我会说,甚 ...

  6. jsf用于页面判断的标签_用于操作和导航的JSF命令组件标签

    jsf用于页面判断的标签 JSF provides two command component tags for performing action and navigation. They are ...

  7. jsf刷新页面_JSF页面生命周期管理

    jsf刷新页面 When the user requests for a page, the lifecycle of JSF begins. JavaServer faces builds the ...

  8. jsf面试题_JSF面试问答

    jsf面试题 I have written a lot on JSF framework recently, so it's high time I write one on JSF intervie ...

  9. vue脚手架的安装、生命周期、文件导入格式、局部组件和全局组件、动态添加属性和方法、插槽、传值

    -----------------------------------    DOS命令 进入dos:  win+r 切换盘符: d: 查看: dir 打开文件夹: cd 文件夹的名字 返回上一级目录 ...

最新文章

  1. UOJ46. 【清华集训2014】玄学
  2. MATLAB 线型 颜色 和 标记点组合使用
  3. 构建基于分布式SOA架构的统一身份认证体系
  4. SQL转换函数(CAST 和 CONVERT)
  5. 带你掌握4种Python 排序算法
  6. Qt Model/View/Delegate浅谈 - QAbstractListModel
  7. 尚硅谷设计模式-观察者模式
  8. JAVA的if用法比如if(...){} 和if()没有区别
  9. 凸优化第五章对偶 5.5 最优性条件
  10. Magento报错之SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry for key 1
  11. 金特会谈:有骨气的人,才会被人尊重
  12. mysql 登录 无密码_重置mysql的密码/无密码登录mysql
  13. 定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。
  14. 疫情重压下,屈臣氏为何上半年仍盈利?
  15. 鸿图之下服务器维护10月25,鸿图之下11月25日维护更新公告
  16. 哪里东西更便宜?读《卧底经济学(珍藏版)》
  17. 公文管理系统案例展示
  18. 分享129个ASP源码,总有一款适合您
  19. python余弦定理_余弦定理与文本相似度
  20. 王菲语法11 动词(非谓语动词)

热门文章

  1. 大二暑假工作三个月后辞职,总体感悟
  2. ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that
  3. 三个水桶(看了三遍,想了五遍!)
  4. Servlet 中文乱码处理
  5. 深入理解python的元组本身不可变性
  6. 电脑基本快捷键的使用
  7. linux跑循环脚本占内存,Linux下实现脚本监测特定进程占用内存情况
  8. javafx查找子节点_JavaFX技巧29:使布局忽略不可见的节点
  9. java登录界面命令_Java命令行界面(第30部分):观察
  10. 黑马2016java_2016年成功的Java开发人员简介