日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時間:2023/12/3 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsf tree组件_JSF和“立即”属性–命令组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

jsf tree組件

JSF中的即時屬性通常被誤解。 如果您不相信我,請查看Stack Overflow 。 造成混淆的部分原因可能是由于輸入(即<h:inputText />)和命令(即<h:commandButton />)組件都立即可用,每個組件對JSF生命周期的影響都不同。

這是標準的JSF生命周期:

出于本文的目的,我假設您熟悉JSF生命周期的基礎知識。 如果您需要簡介或內(nèi)存更新,請查看Java EE 6教程– JavaServer Faces應用程序的生命周期 。

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

在Command組件上為Instant = true

在標準 JSF生命周期中,在“ 調(diào)用應用程序”階段評估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 ,以呈現(xiàn)視圖:

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

所有這些結合起來產(chǎn)生了這種可愛的形式:

當用戶單擊“ 添加用戶”按鈕時,將在“ 調(diào)用應用程序”階段調(diào)用 #{userManager.addUser} 。 這是有道理的,因為我們希望在持久保存輸入字段之前先對其進行驗證,轉換并將其應用于newUser。

現(xiàn)在,讓我們在頁面上添加一個“取消”按鈕,以防用戶改變主意。 我們將在頁面中添加另一個<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}直到在流程驗證階段之后發(fā)生的“ 調(diào)用應用程序”階段才被調(diào)用 ; 由于我們沒有輸入名字和姓氏,因此在調(diào)用#{userManager.cancel}之前驗證失敗,并且在“ 過程驗證”階段之后呈現(xiàn)響應。

我們當然不希望最終用戶在取消之前輸入有效用戶! 幸運的是,JSF在Command組件上提供了即時屬性。 當直接設置為true的命令組件上,行動調(diào)用的應用請求值階段:

這非常適合我們的“取消”用例。 如果我們將Instant = true添加到Cancel,則在進行任何驗證之前,將在Apply Request Values階段調(diào)用# {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>

因此,現(xiàn)在單擊“取消”時,將在“ 應用請求值”階段中調(diào)用#{userManager.cancel} ,并通過預期的取消消息返回首頁。 沒有驗證錯誤!


輸入組件也具有即時屬性,該屬性還將其所有邏輯移至“ 應用請求值”階段。 但是,其行為與Command組件略有不同,特別是取決于對Input組件的驗證是否成功。 我的下一篇文章將介紹Input組件上的Instant = true 。 現(xiàn)在,這里是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和“立即”属性–命令组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。