jsf表单验证_动态表单,JSF世界期待已久

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

jsf表单验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转载黑客是如何黑到你手机的?绝对涨姿势,一位黑客的Wi-Fi入侵实录!

声明&#xff1a;这是一虚构的故事&#xff0c;因此对图片均进行了模糊化处理。内容整理自网络&#xff01; 故事的主人公小黑是一名从事IT相关工作的技术宅男。五一长假来临&#xff0c;宅在家中的他相当无聊&#xff0c;打开手机上的Wi-Fi模块&#xff0c;发现附近有将近10个…

linux安装pip

使用脚本安装和升级pip 要安装或升级pip&#xff0c;需要下载 get-pip.py. 地址&#xff1a;https://bootstrap.pypa.io/get-pip.py 然后运行以下命令 (需要管理员权限): $ wget https://bootstrap.pypa.io/get-pip.py $ python get-pip.py #查看pip版本 $ pip -V

我们如何意外地将Hibernate的JDBC流量增加了一倍

这篇文章描述了我最近使用Hibernate ORM的经验。 多年以来&#xff0c;该框架并没有让我感到惊讶&#xff0c;您可能会在使用它时遇到性能问题。 我以为我已经看完了&#xff0c;但是这次我又措手不及了。 该问题的基础是在对一个完全不相关的库进行故障排除时建立的&#xff…

html5——DOM扩展

元素获取 1、document.getElementsByClassName (class) 通过类名获取元素&#xff0c;以类数组形式存在。 2、document.querySelector(‘div’) 通过CSS选择器获取元素&#xff0c;符合匹配条件的第1个元素。 3、document.querySelectorAll(selector) 通过CSS选择器获取元素&am…

linux 系统安装mongodb数据库---方法1

参考&#xff1a;https://www.jianshu.com/p/994bc7b19b26 参考&#xff1a;https://blog.csdn.net/duan9015/article/details/106447942/ 1、制作 repo 文件 vim /etc/yum.repos.d/mongodb-org-4.2.repo[mongodb-org-4.2] nameMongoDB Repository baseurlhttps://repo.mongo…

JAVA递归实现全排列

全排列&#xff08;permutation&#xff09; 排列组合概念 排列&#xff0c;就是指从给定n个数的元素中取出指定m个数的元素&#xff0c;进行排序 组合&#xff0c;则是指从给定n个数的元素中仅仅取出指定m个数的元素&#xff0c;不考虑排序 全排列 以数字为例&#xff0c;全排…

centos8 linux部署node项目

1、域名解析到服务器 2、上传代码到项目目录 3、数据库&#xff1a; mongo use user user是数据库名 db.nfrc.insert({“name”:admin,“pawwsord”:“123456”}) nfrc集合名&#xff0c;相当于表名 db.nfrc.find() 数据行的id和项目中routes文件下index.js里面的id相一致 …

java云端部署_Jelastic Java云端平台

java云端部署谁在Jelastic背后&#xff1f; 那是我的第一个问题&#xff0c;因此我浏览了Jelastic网站。 回答此问题的最佳方法是查看“ Jelastic团队”部分。 创始人&#xff0c;顾问&#xff0c;特殊合作伙伴构成了一支真正的专业团队。 作为特殊的合作伙伴&#xff0c;您会…

注意点

1&#xff0c;流关闭&#xff0c;尽量不要在一个异常捕获里&#xff0c;那样一个关闭出现问题&#xff0c;下面的流不会再关闭。。。 2&#xff0c;ArrayList<String> list 可以加入null list.add(null);转载于:https://www.cnblogs.com/z2qfei/p/8056760.html

linux系统安装宝塔面板

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

Spring Bootstrap中带有配置元数据的高级配置

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后&#xff0c;是时候看看如何进一步执行此步骤并进一步自定义配置了。 在本文中&#xff0c;我计划提出对配置属性的弃用&#xff0c;并讨论各种值提供程序&#xff…

设计模式のStrategyPattern(策略模式)----行为模式

一、问题产生背景 当我们进行一系列处理时&#xff08;员工工资核算&#xff0c;会员管理&#xff0c;计算器&#xff0c;优惠活动&#xff09;&#xff0c;会有很多相似的算法和处理过程&#xff0c;只是由于具体的算法的差异&#xff0c;导致必须不同处理。这些处理和客户端无…

linux安装虚拟环境virtualenv

&#xff08;安装虚拟环境&#xff0c;不然会和其他环境冲突&#xff09; https://blog.csdn.net/wtwcsdn123/article/details/88653179 https://blog.csdn.net/u011798443/article/details/80881931&#xff08;超详细&#xff09; pip install virtualenv 创建python3环境 …

windows系统服务器添加ssl证书

一、为域名申请证书 浏览器打开后系在对应版本&#xff1a; https://keymanager.org/ 注册账号&#xff1a; https://freessl.cn/ 安装刚刚下载的软件&#xff1b; 登录进去就可以申请域名的证书了 二、域名解析 解析完后倒回软件那点击“配置完成&#xff0c;检查一下” …

使用ANTLR在5分钟内用Java解析任何语言:例如Python

我喜欢出于多种目的处理代码&#xff0c;例如静态分析或自动重构。 对我来说&#xff0c;有趣的部分是推理从抽象语法树&#xff08;AST&#xff09;构建的模型。 为此&#xff0c;您需要一种从源文件中获取AST的方法。 使用ANTLR和完整的语法集合可在此处轻松完成&#xff1a;…

[转]Global exception handling in Web API 2.1 and NLog

本文转自&#xff1a;https://stackoverflow.com/questions/25865610/global-exception-handling-in-web-api-2-1-and-nlog In Web API 2.1 is new Global Error Handling. I found some example how to log exceptions into Elmah ( elmah sample ). But I use NLog to log er…

linux服务器配置ssl证书

一、申请ssl证书 这里有申请域名的ssl证书的步骤&#xff1a; https://blog.csdn.net/weixin_38797742/article/details/109471250 二、配置服务器 打开项目对应的配置文件&#xff0c;配置图中三行信息&#xff0c;端口、还有申请的证书的所在目录。 listen 443 ssl; ssl_…

将自定义的集合数据使用pagehelper进行分页

PageHelper 是一个用于在 MyBatis 中进行分页查询的插件&#xff0c;它主要设计用于对从数据库查询的结果进行分页。 如果数据不是直接从 MySQL 数据库中查询得到&#xff0c;而是已经存在于内存中的集合&#xff08;如 List、ArrayList 等&#xff09;&#xff0c;你可以通过以…

视图层的数据绑定

数据绑定WXML 中的动态数据均来自对应 Page 的 data。 只要把data中的数据改变&#xff0c;视图层就会自动改变&#xff0c;无需使用DOM操作。 简单绑定数据绑定使用 Mustache 语法&#xff08;双大括号&#xff09;将变量包起来 使用方法&#xff1a; {{ 内容 }} 在组件中使用…

使用dwebsocket在Django中使用Websocket

一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接…