javascript
jsf 写一个action_一个JSF清单示例
jsf 寫一個action
這是使用JSF 2.0(JavaServer Faces)構建的示例列表應用程序。 該應用程序是待辦事項列表。 該應用程序具有添加,編輯或刪除列表中項目的功能。 待辦事項具有名稱和描述屬性。
完成的應用程序的JSF頁面具有:
- 使用h:selectOneListbox html標記實現的待辦事項列表。
- 使用f:selectItems核心標簽填充列表數據。
- 待辦事項名稱和描述字段分別使用h:inputText和h:inputTextarea標記實現。
- 新增,編輯,保存,刪除和取消功能通過h:commandButton標記實現。
- 使用h:outputText標記實現的狀態消息。
應用中使用的類:
- 待辦事項:代表待辦事項,并具有名稱和描述屬性。
- TodosBean:這是一個托管bean; 它具有運行應用程序的代碼,包括組件的偵聽器和訪問器方法。
- TodoConverter:這是一個自定義轉換器,將字符串todo名稱轉換為Todo對象,反之亦然。
下圖顯示了已完成的應用程序的用戶界面:
此示例應用程序分三個步驟進行說明。 第一步說明基本列表的實現。 該應用程序的功能在接下來的步驟中得到了增強。 這些步驟是:
- 步驟1:待辦事項列表顯示項目,并在選擇時顯示選定的待辦事項屬性。
- 第2步:列出待辦事項,并執行將項目添加到列表的功能。
- 第3步:列出待辦事項和添加,編輯和刪除列表項的功能。
步驟1:待辦事項列表顯示項目,并在選擇時顯示選定的待辦事項屬性。
以下是此應用程序的代碼組件:
- Todo.java類表示待辦事項。
- index.xhtml是帶有列表框的JSF頁面,以及一條狀態消息,用于顯示列表中的選定項目。
- TodosBean.java托管Bean具有獲取列表數據,運行列表的值更改偵聽器以及顯示狀態消息的功能。
Todo.java:
此類表示待辦事項。 它具有兩個屬性-名稱和描述。 請注意, Object類的重寫toString()方法。
Package com.javaquizplayer.example; public class Todo {private String name;private String desc;public Todo() {}public Todo(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return this.name;} }index.xhtml:
此JSF頁面顯示待辦事項列表。 列表可以滾動,可以選擇一個項目。 所選項目名稱顯示在狀態消息中。
列表框是使用h:selectOneListbox html標記實現的。 列表框的當前選定項目值由屬性指定: value="#{bean.todo}" 。 選擇項通過f:selectItems核心標簽指定:
<f:selectItems value="#{bean.data}"/>該標簽位于h:selectOneListbox tag 。 列表框的項目是從TodosBean的getData()方法填充的,該方法返回List集合。 列表框顯示標簽–待辦事項的名稱值,即toString()方法中Todo對象的String值。
列表框的值更改偵聽器使用以下屬性指定:
valueChangeListener=""#{bean.valueChanged}"選擇列表項后,將提交表單并執行此偵聽器代碼。 在此示例中,當選擇一個列表項時,待辦事項的名稱在狀態消息中顯示為“ todo_item_name selected”。
每次在列表框中選擇一個項目時,都會提交該表單。 這是通過列表框的屬性onchange="submit()" 。
狀態消息與輸出組件一起顯示:
<h:outputText id="msg" value="#{bean.message}" />。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"> <h:head><title>A JSF List Example</title> </h:head> <h:body><h:form><h3>TODOs List</h3><h:selectOneListbox id="list" size="10"value="#{bean.todo}"valueChangeListener="#{bean.valueChanged}"onchange="submit()"><f:selectItems value="#{bean.data}"/> </h:selectOneListbox><h:outputText id="msg" value="#{bean.message}" /></h:form> </h:body> </html>TodosBean:
此托管bean類具有以下功能:
- 創建初始待辦事項數據并填充待辦事項列表。
- 值更改偵聽器,以獲取當前選定的列表項。
- 在列表中捕獲當前選定的項目值。
- 設置狀態消息。
步驟2:列出待辦事項,并具有將項目添加到清單的功能。
在此步驟中,應用程序具有添加新待辦事項的功能。 單擊新建按鈕,在名稱和描述文本字段中輸入待辦事項數據并保存。 通過單擊取消按鈕或在列表中選擇另一個項目來取消新的待辦事項數據輸入。
代碼組成與上一步相同,但是增加了新功能。 新的自定義轉換器類將添加到應用程序。
- Todo.java類表示待辦事項,未更改。
- index.xhtml是帶有列表框的JSF頁面,以及顯示列表中所選項目的狀態消息。 此外,還有一些小部件可以輸入新的待辦事項并保存。
- TodosBean.java托管Bean具有獲取列表數據,運行列表值更改偵聽器并顯示消息的代碼。 此外,還有用于新動作,保存動作和取消動作的動作偵聽器。
- 轉換器TodoConverter.java將數據從todo字符串值轉換為Todo對象,反之亦然。
Todo.java:
此類保持不變。
index.xhtml:
以下是更改:
列表框當前選擇的項目值指定為: value="#{bean.todo}" 。 在上一步1中,項目值解析為todo的名稱字符串。 現在,該值解析為Todo的一個實例。
以下是新添加的:
待辦事項的名稱和描述字段分別通過h:inputText和h:inputTextarea標記實現。 請注意,只有在編輯待辦事項數據時(即,新的待辦事項功能),這些字段才可編輯: readonly="#{not bean.editable}" 。 當列表處于選擇模式時,這些字段是只讀的。
轉換器附加到列表,以將選定的項目名稱轉換為Todo對象,反之亦然,使用f:converter核心標記:
<f:converter converterId="todoConvertor"/>請注意,為轉換器設置了一個屬性:
<f:attribute name="beanattr" value="#{bean}"/>; 用于訪問轉換器類中的Todo數據。
使用h:commandButton標簽為新的,保存和取消操作添加了三個命令按鈕。 每個按鈕都有其各自的動作偵聽器。 例如:
<h:commandButton value="New" actionListener="#{bean.newListener}"/>。
最后,使用f:ajax核心標記將列表框的Submit更改為Ajax調用: onchange="submit()"替換為
<f:ajax execute="@this" render="msg name desc" />為什么會有這種變化?
使用提交選項時,如果通過選擇另一個列表項取消了“新建”操作,則不會使用所選項目填充text和textarea字段。 值將保持編輯狀態。 這是因為編輯后的文本值也隨表格一起提交。 這些值將不會更改為所選項目的值。 但是,對于Ajax,不提交表單,僅更新文本值( f:ajax標記的render屬性指定要更新的字段:狀態消息,待辦事項名稱和描述)。
注意:在以下代碼中,突出顯示了上一步1中新添加和刪除的代碼行。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"> <h:head><title>A JSF List Example</title> </h:head> <h:body><h:form><h3>TODOs List</h3><h:panelGrid><h:inputText id="name" value="#{bean.todoName}" size="30"readonly="#{not bean.editable}"/><h:inputTextarea id="desc" value="#{bean.todoDesc}"rows="2" cols="40"readonly="#{not bean.editable}"/><h:selectOneListbox id="list" size="10" value="#{bean.todo}"valueChangeListener="#{bean.valueChanged}"onchange="submit()"><f:ajax execute="@this" render="msg name desc"/><f:selectItems value="#{bean.data}"/><f:attribute name="beanattr" value="#{bean}"/><f:converter converterId="todoConvertor"/></h:selectOneListbox></h:panelGrid><h:commandButton value="New" actionListener="#{bean.newListener}"/><h:commandButton value="Save" actionListener="#{bean.saveListener}"/><h:commandButton value="Cancel" actionListener="#{bean.cancelListener}"/><h:outputText id="msg" value="#{bean.message}" /></h:form> </h:body> </html>TodoConverter.java:
這是一個自定義轉換器類,將Todo對象轉換為字符串(todo名稱),反之亦然。
package com.javaquizplayer.example; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; import javax.faces.convert.FacesConverter; import java.util.Map; @FacesConverter(value="todoConvertor") public class TodoConverter implements Converter {private static final long serialVersionUID = 1L;@Overridepublic Object getAsObject(FacesContext context, UIComponent component,String value)throws ConverterException {if (value == null) {return null;}Map<String, Object> attrs = component.getAttributes(); TodosBean bean = (TodosBean) attrs.get("beanattr");Todo todo = bean.getTodoForName(value);return todo;}@Overridepublic String getAsString(FacesContext context, UIComponent component,Object value)throws ConverterException {if (value == null) {return null;}Todo todo = (Todo) value;return todo.getName();} }TodosBean.java:
此托管bean類具有以下功能:
- 填充待辦事項列表。
- 值更改偵聽器,以獲取當前選定的列表項。
- 在列表中捕獲當前選定的項目值。
- 設置狀態消息。
這些是更改:
- 將列表中當前選擇的項目值捕獲為Todo對象(而不是先前使用的todo名稱字符串)。
- 更改值更改偵聽器以獲取Todo對象,而不是字符串值todo名稱。
這些是新添加的:
- 待辦事項名稱,描述及其可編輯性的訪問器方法。
- 新的,保存和取消動作的動作偵聽器。
第3步:列出待辦事項和添加,編輯和刪除列表項的功能。
這是完成的應用程序。 它具有選擇,添加,編輯和刪除列表項的功能。
在此步驟中,添加了兩個新功能-編輯,刪除列表項。 要進行編輯,請選擇一個待辦事項列表項,然后單擊“編輯”按鈕。 這樣可以更改名稱和描述值,并保存。 可以通過單擊取消按鈕或選擇另一個列表項來取消編輯。 刪除功能允許刪除選定的待辦事項列表項。
這些代碼組件與前面的步驟2相同,但是通過新功能進行了增強。
- Todo.java類表示待辦事項。 這沒有改變。
- 轉換器TodoConverter.java將數據從todo字符串值轉換為Todo對象,反之亦然。 這沒有改變。
- index.xhtml是具有列表框,待辦事項屬性和狀態消息的JSF頁面,該狀態消息顯示列表中的選定項目。 此外,還有一些小部件可用于添加,編輯所選項目或將其刪除。
- TodosBean.java托管Bean具有獲取列表數據,運行列表的值更改偵聽器并顯示消息的代碼。 此外,還有用于新的,編輯,刪除,保存和取消動作的動作偵聽器。
Todo.java:
此類保持不變。
TodoConverter.java:
此類保持不變。
index.xhtml:
以下是新添加的:
添加了兩個命令按鈕以進行編輯和刪除操作。 每個按鈕都有其各自的動作偵聽器。
TodoBean.java:
此托管bean類具有以下功能:
- 填充待辦事項列表。
- 值更改偵聽器,以獲取當前選定的列表項。
- 在列表中捕獲當前選定的項目值。
- 設置狀態消息。
- 待辦事項名稱,描述及其可編輯性的訪問器方法。
- 新的,保存和取消動作的動作偵聽器。 增強了這些功能以適應編輯和刪除功能。
這些是新添加的:
- 編輯和刪除操作的操作偵聽器。
代碼下載:
這些是下載完整的應用程序的WAR文件和源代碼的鏈接。
- 源代碼
- WAR文件
注釋和參考:
該應用程序是使用Apache MyFaces 2.0開發的(MyFaces 2.0實現了JavaServer Faces 2.0)。 該應用程序已在Tomcat 6 Web服務器和GlassFish 3應用程序服務器(GlassFish 3實現Java EE 6)上進行了測試。
有用的鏈接:
- Apache MyFaces 2.0
- GlassFish 3文檔
- Java EE 6 API
翻譯自: https://www.javacodegeeks.com/2015/02/jsf-list-example.html
jsf 寫一個action
總結
以上是生活随笔為你收集整理的jsf 写一个action_一个JSF清单示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑常用命令提示符大全电脑常用命令提示符
- 下一篇: 联想YOGA二合一平板发布联想平板电脑二