動態表單,JSF世界早已等待

新的PrimeFaces擴展版本0.5.0帶來了新的DynaForm組件。 通常,如果知道行/列的數量,元素的位置等,則可以通過h:panelGrid或p:panelGrid來構建非常簡單的表單。 對于靜態表單,這是正確的。 但是,如果在運行時動態描述表單,則無法使用h:panelGrid或p:panelGrid。 例如,如果整個表單的定義都放在數據庫或XML文件中。 DynaForm使得構建帶有標簽,輸入,選擇和任何其他元素的動態表單成為可能。 沒有限制。 在展示柜中探索其所有功能。 讓我們展示如何構建一個簡單的動態表單。

主要步驟:
創建模型實例:DynaFormModel model = new DynaFormModel();
將行添加到常規網格:DynaFormRow row = model.createRegularRow(); 添加標簽:DynaFormLabel標簽= row.addLabel(value,colspan,rowspan); 添加可編輯控件:DynaFormControl控件= row.addControl(數據,類型,colspan,rowspan); 設置標簽和控件之間的關系(可選):label.setForControl(control);

根據需要重復最后四個步驟。 從UI角度看會是什么樣? 表單驗證失敗后的屏幕截圖:

主要標簽是pe:dynaForm。 子標記pe:dynaFormControl匹配在Java控件中通過“ type”屬性創建的標記。 這通常是“一對多”的關系。 下面列出了上面動態形式的XHTML / Java(控制器bean和模型)代碼。

<h:panelGroup id="dynaFormGroup"><p:messages id="messages" showSummary="true"/><pe:dynaForm id="dynaForm" value="#{dynaFormController.model}" var="data"><pe:dynaFormControl type="input" for="txt"><p:inputText id="txt" value="#{data.value}" required="#{data.required}"/></pe:dynaFormControl><pe:dynaFormControl type="calendar" for="cal" styleClass="calendar"><p:calendar id="cal" value="#{data.value}" required="#{data.required}" showOn="button"/></pe:dynaFormControl><pe:dynaFormControl type="select" for="sel" styleClass="select"><p:selectOneMenu id="sel" value="#{data.value}" required="#{data.required}"><f:selectItems value="#{dynaFormController.languages}"/></p:selectOneMenu></pe:dynaFormControl><pe:dynaFormControl type="textarea" for="tarea"><p:inputTextarea id="tarea" value="#{data.value}" required="#{data.required}" autoResize="false"/></pe:dynaFormControl><pe:dynaFormControl type="rating" for="rat"><p:rating id="rat" value="#{data.value}" required="#{data.required}"/></pe:dynaFormControl><f:facet name="buttonBar"><p:commandButton value="Submit" action="#{dynaFormController.submitForm}"process="dynaForm" update="_mainForm_dynaFormGroup"/><p:commandButton type="reset" value="Reset" style="margin-left: 5px;"/></f:facet></pe:dynaForm>
</h:panelGroup>
@ManagedBean
@ViewScoped
public class DynaFormController implements Serializable {private DynaFormModel model;private static List<SelectItem> LANGUAGES = new ArrayList<SelectItem>();public DynaFormController() {model = new DynaFormModel();// add rows, labels and editable controls// set relationship between label and editable controls to support outputLabel with "for" attribute// 1. rowDynaFormRow row = model.createRegularRow();DynaFormLabel label11 = row.addLabel("Author", 1, 1);DynaFormControl control12 = row.addControl(new BookProperty("Author", true), "input", 1, 1);label11.setForControl(control12);DynaFormLabel label13 = row.addLabel("ISBN", 1, 1);DynaFormControl control14 = row.addControl(new BookProperty("ISBN", true), "input", 1, 1);label13.setForControl(control14);// 2. rowrow = model.createRegularRow();DynaFormLabel label21 = row.addLabel("Title", 1, 1);DynaFormControl control22 = row.addControl(new BookProperty("Title", false), "input", 3, 1);label21.setForControl(control22);// 3. rowrow = model.createRegularRow();DynaFormLabel label31 = row.addLabel("Publisher", 1, 1);DynaFormControl control32 = row.addControl(new BookProperty("Publisher", false), "input", 1, 1);label31.setForControl(control32);DynaFormLabel label33 = row.addLabel("Published on", 1, 1);DynaFormControl control34 = row.addControl(new BookProperty("Published on", false), "calendar", 1, 1);label33.setForControl(control34);// 4. rowrow = model.createRegularRow();DynaFormLabel label41 = row.addLabel("Language", 1, 1);DynaFormControl control42 = row.addControl(new BookProperty("Language", false), "select", 1, 1);label41.setForControl(control42);DynaFormLabel label43 = row.addLabel("Description", 1, 2);DynaFormControl control44 = row.addControl(new BookProperty("Description", false), "textarea", 1, 2);label43.setForControl(control44);// 5. rowrow = model.createRegularRow();DynaFormLabel label51 = row.addLabel("Rating", 1, 1);DynaFormControl control52 = row.addControl(new BookProperty("Rating", 3, true), "rating", 1, 1);label51.setForControl(control52);}public DynaFormModel getModel() {return model;}public String submitForm() {... // do something}public List<SelectItem> getLanguages() {if (LANGUAGES.isEmpty()) {LANGUAGES.add(new SelectItem("en", "English"));LANGUAGES.add(new SelectItem("de", "German"));LANGUAGES.add(new SelectItem("ru", "Russian"));LANGUAGES.add(new SelectItem("tr", "Turkish"));}return LANGUAGES;}
}public class BookProperty implements Serializable {private String name;private Object value;private boolean required;public BookProperty(String name, boolean required) {this.name = name;this.required = required;}public BookProperty(String name, Object value, boolean required) {this.name = name;this.value = value;this.required = required;}// getter // setter
}
您會看到一個重要功能是對標簽的內置支持。 DynaForm自動呈現標簽-無需編寫p:outputLabel。 另一個功能是autoSubmit標志。 它允許在URL中傳遞表單參數,在頁面加載時構建表單并自動提交。 更多亮點:可擴展的擴展視圖區域(網格),打開/關閉狀態保存,小部件的客戶端API,各種方面。 接下來的屏幕截圖展示了如何使用字段上方的標簽和諸如PrimeFaces分隔符之類的各種元素構建動態表單。 通過單擊“切換模型”鏈接,可以切換此示例中的兩種形式。 注意,帶有pe:dynaForm的XHTML代碼保持不變,只有Java模型被更改。

探索用例中的相應代碼還有另一種形式 。

參考: 動態表單,JSF世界在我們的JCG合作伙伴 Oleg Varaksin的軟件開發博客上 很期待 。


翻譯自: https://www.javacodegeeks.com/2012/06/dynamic-forms-jsf-world-was-long.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372678.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372678.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372678.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 定時器事件(設置時間間隔,間歇性執行某一函數,控制臺程序)

定時器事件代碼 static void Main(string[] args) {Method();#region 定時器事件 Timer aTimer new Timer();aTimer.Elapsed new ElapsedEventHandler(TimedEvent);aTimer.Interval seconds * 1000; //配置文件中配置的秒數aTimer.Enabled true;#endregionstring strLi…

總結get和post區別

參考博文&#xff1a;   淺談HTTP中Get與Post的區別 1. 數據傳遞方向&#xff1a; Get是向服務器發索取數據的一種請求&#xff0c;Post是向服務器提交數據的一種請求 &#xff08;都是請求&#xff0c;并不是一個取一個發&#xff09; Get&#xff1a;①用于獲取信息&#x…

Vmware安裝Centos NAT方式設置靜態IP

【Vmware中在搭建集群環境等&#xff0c;DHCP自動獲取IP方式不方便&#xff0c;為了固定IP減少頻繁更改配置信息&#xff0c;建議使用靜態IP來配置&#xff0c;網絡連接主要有三種方式 1.nat 2.橋接&#xff0c;3主機模式 &#xff0c;在這里主要介NAT方式&#xff0c; 為什么使…

1 TB /節點時快速,可預測且高度可用

世界正每秒從移動設備&#xff0c;Web和各種小工具向應用程序推送大量數據。 如今&#xff0c;更多的應用程序必須處理此數據。 為了保持性能&#xff0c;這些應用程序需要快速訪問數據層。 在過去的幾年中&#xff0c;RAM價格下降了&#xff0c;我們現在可以便宜得多地獲得具有…

java jni 內存_Android開發之JNI內存模型

Java 與JNI 內存管理是怎樣的想要弄清楚Java與JNI的內存管理的關系&#xff0c;首先要弄清楚JVM的內存模型JVM內存模型.png其中本地方法棧就是運行時調用native 方法的數據保存區。本地方法棧的大小可以設置成固定的或者是動態擴展。Java中的內存泄露JAVA 編程中的內存泄漏&…

04 linux用戶群組和權限

作業一&#xff1a; 1)新建用戶natasha&#xff0c;uid為1000&#xff0c;gid為555&#xff0c;備注信息為“master” 2)修改natasha用戶的家目錄為/Natasha 3)查看用戶信息配置文件的最后一行 4)為natasha用戶設置密碼“123” 5)查看用戶密碼配置文件的最后一行 6)將natasha用…

基于 CoreText 實現的高性能 UITableView

引起UITableView卡頓比較常見的原因有cell的層級過多、cell中有觸發離屏渲染的代碼&#xff08;譬如&#xff1a;cornerRadius、maskToBounds 同時使用&#xff09;、像素是否對齊、是否使用UITableView自動計算cell高度的方法等。本文將從cell層級出發&#xff0c;以一個仿朋友…

RESTEasy教程第1部分:基礎

RESTEasy是JBoss / RedHat的JAX-RS實現&#xff0c;內置于JBoss 6之后。 在這里&#xff0c;我將向您展示如何使用RESTEasy和JBossAS7.1.1.FINAL開發一個簡單的RESTful Web服務應用程序。 步驟1&#xff1a;使用Maven配置RESTEasy依賴項。 <project xmlnshttp:maven.apache.…

php函數相關函數,PHP數組相關函數匯總

這篇文章主要介紹了PHP數組相關函數,匯總說明了php中相關的數組,具有一定參考借鑒價值,需要的朋友可以參考下本文總結了PHP數組相關的函數。分享給大家供大家參考。具體如下&#xff1a;這里包括函數名和用法說明&#xff0c;沒有詳細的代碼范例。感興趣的朋友可以查閱本站相關…

Web Magic 總體架構

1.2 總體架構 WebMagic的結構分為Downloader、PageProcessor、Scheduler、Pipeline四大組件&#xff0c;并由Spider將它們彼此組織起來。這四大組件對應爬蟲生命周期中的下載、處理、管理和持久化等功能。WebMagic的設計參考了Scapy&#xff0c;但是實現方式更Java化一些。 而S…

L1-006. 連續因子

一個正整數N的因子中可能存在若干連續的數字。例如630可以分解為3*5*6*7&#xff0c;其中5、6、7就是3個連續的數字。給定任一正整數N&#xff0c;要求編寫程序求出最長連續因子的個數&#xff0c;并輸出最小的連續因子序列。 輸入格式&#xff1a; 輸入在一行中給出一個正整數…

基于Java JAAS表單的身份驗證

使用JAAS實現登錄模塊是一個高級主題&#xff0c;而且大多數開發人員也很少有機會參與這種開發。 但是JAAS登錄模塊的基本實現并不是那么困難&#xff0c;這是因為我打算將其發布。 在這里&#xff0c;我正在解釋如何實現tomcat管理的身份驗證模塊。 此實現與容器無關。 我們可…

java自動投票代碼,Java 投票(自動添一)

Java 投票(自動加一)數據庫建立&#xff1a;SQL> create table vote(2 id number,3 name varchar(200),4 num number5 );//index.jsppageEncoding"utf-8"%>投票Connection conn1 null;Statement stmt1 null;ResultSet rs1 null;try {Class.forName("or…

SpringMVC搭建+實例

想做一點自己喜歡的東西&#xff0c;研究了一下springMVC,所以就自己搭建一個小demo,可供大家吐槽。 先建一個WEB工程&#xff0c;這個相信大家都會&#xff0c;這里不在多說。去網上下載spring jar包&#xff0c;然后在WEB-INF下新建一個lib文件&#xff0c;將下載的jar包放進…

Mockito和Hamcrest的試駕制造商

過去&#xff0c;很多人問我是否測試吸氣劑和吸氣劑&#xff08;屬性&#xff0c;屬性等&#xff09;。 他們還問我是否測試我的建筑商。 在我看來&#xff0c;答案取決于情況。 當使用遺留代碼時&#xff0c;我不會費心去測試數據結構&#xff0c;這意味著對象只帶有getter和s…

php8更新,PHP 8 中新特性以及重大調整

PHP 8&#xff0c;PHP 的一個新的大版本&#xff0c;預計將于2020年12月3日發布&#xff0c;這意味著將不會有 PHP 7.5 版本。PHP8目前正處于非常活躍的開發階段&#xff0c;所以在接下來的幾個月里&#xff0c;情況可能會發生很大的變化。在這篇文章中&#xff0c;我會維持一個…

Javascript學習之函數(function)

http://www.cnblogs.com/royalroads/p/4418587.html 在JS中,Function(函數)類型實際上是對象;每個函數都是Function類型的實例&#xff0c;而且都與其他引用類型一樣具有屬性和方法。由于函數是對象,因此函數名實際上也是一個指向函數對象的指針。 一 函數的聲明方式 //1.函數聲…

jquery彈出可關閉遮罩提示框

jquery CSS3遮罩彈出層動畫效果&#xff0c;使用非常簡單&#xff0c;就兩個標簽&#xff0c;里面自定義內容和樣式&#xff0c;四種常見效果&#xff0c;懂的朋友還可以修改源代碼修改成自己想要的效果效果展示 http://hovertree.com/texiao/jquery/85/代碼如下&#xff1a; &…

用于Spring JPA2后端的REST CXF

在本演示中&#xff0c;我們將使用spring / jpa2后端生成一個REST / CXF應用程序。 該演示演示了分鐘項目的軌跡REST-CXF 。 演示2中的模型保持不變。 濃縮保持不變。 但是軌道改變了 添加的是2層&#xff1a; 在JPA2之上具有彈簧集成的DAO層 具有JAX-RS批注的REST-CXF層…

php與服務器關系,php與web服務器關系

1.什么是cgi程序&#xff0c;cgi與fastcgi的區別CGI的中文名稱是通用網關接口&#xff0c;是外部應用程序與web服務器之間的接口標準。CGI規范允許web服務器執行外部程序&#xff0c;并將它們的輸出發送給web瀏覽器。而fastcgi則是一個常駐型的cgi&#xff0c;它可以一直執行著…