优化网站收费标准,wordpress主题微信验证码,五指山网站建设,芙蓉区网站建设jsf tree组件JSF中的即时属性通常被误解。 如果您不相信我#xff0c;请查看Stack Overflow 。 造成混淆的部分原因可能是由于输入#xff08;即h#xff1a;inputText /#xff09;和命令#xff08;即h#xff1a;commandButton /#xff09;组件都立… jsf tree组件 JSF中的即时属性通常被误解。 如果您不相信我请查看Stack Overflow 。 造成混淆的部分原因可能是由于输入即hinputText /和命令即hcommandButton /组件都立即可用每个组件对JSF生命周期的影响都不同。 这是标准的JSF生命周期 出于本文的目的我假设您熟悉JSF生命周期的基础知识。 如果您需要简介或内存更新请查看Java EE 6教程– JavaServer Faces应用程序的生命周期 。 注意本文中的代码示例适用于JSF 2Java EE 6但其原理与JSF 1.2Java EE 5相同。 在Command组件上为Instant true 在标准 JSF生命周期中在“ 调用应用程序”阶段评估Command组件上的action属性。 例如假设我们有一个User实体/ bean public class User implements Serializable {NotBlankLength(max 50)private String firstName;NotBlankLength(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:formh:panelGrid columns2h:outputText valueFirst Name: /h:panelGrouph:inputText idfirstNamevalue#{userManager.newUser.firstName} /h:message forfirstName //h:panelGrouph:outputText valueLast Name: /h:panelGrouph:inputText idlastName value#{userManager.newUser.lastName} /h:message forlastName //h:panelGroup/h:panelGridh:commandButton valueAdd User action#{userManager.addUser()} /
/h:form 所有这些结合起来产生了这种可爱的形式 当用户单击“ 添加用户”按钮时将在“ 调用应用程序”阶段调用 {userManager.addUser} 。 这是有道理的因为我们希望在持久保存输入字段之前先对其进行验证转换并将其应用于newUser。 现在让我们在页面上添加一个“取消”按钮以防用户改变主意。 我们将在页面中添加另一个hcommandButton / h:form!-- Snip Input components -- h:commandButton valueAdd User action#{userManager.addUser()} /h:commandButton valueCancel 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 valueAdd User action#{userManager.addUser()} /h:commandButton valueCancel action#{userManager.cancel()} immediatetrue /
/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.htmljsf tree组件