用法
- 在Form Builder中扩展可用的字段类型。
- 可用的表单字段元素插件必须扩展 org.joget.apps.form.model.Element抽象类并实现 org.joget.apps.form.model.FormBuilderPaletteElement接口。
抽象类
org.joget.apps.form.model.Element
- 在wflow-core模块下
- 扩展org.joget.plugin.base.ExtDefaultPlugin。请参阅 插件抽象类和接口。
- 已实现org.joget.plugin.property.model.PropertyEditable。请参阅 插件抽象类和接口。
- 一个基本的抽象类来开发一个表单域元素插件。
- 所有的表单,容器和表单域都必须扩展这个类。
方法细节
抽象方法
renderTemplate
public abstract java.lang.String renderTemplate(org.joget.apps.form.model.FormData formData,java.util.Map dataModel)前端用户界面的HTML模板。
参数:
- dataModel - 包含要在模板中显示的值的模型。
可重写的方法
FormatData
public org.joget.apps.form.model.FormRowSet formatData(org.joget.apps.form.model.FormData formData)检索加载或提交的表单数据并为商店资料夹设置格式的方法。格式化的数据将被存储并返回到FormRowSet中。
formatDataForValidation
public org.joget.apps.form.model.FormData formatDataForValidation(org.joget.apps.form.model.FormData formData)在执行验证之前,用于在请求参数中执行格式数据的覆盖方法
selfValidate
public java.lang.Boolean selfValidate(org.joget.apps.form.model.FormData formData)用于覆盖的方法为该字段执行指定验证。
错误消息可以显示以下代码:
String id = FormUtil.getElementParameterName(this);formData.addFormError(id,"Error !!");render
public java.lang.String render(org.joget.apps.form.model.FormData formData,java.lang.Boolean includeMetaData)呈现用于UI的HTML模板,并具有表单构建器设计模式的选项。这个方法将调用抽象方法 renderTemplate 进行渲染。
参数:
- includeMetaData - 设置为true来呈现Form Builder所需的额外元。
renderErrorTemplate
public java.lang.String renderErrorTemplate(org.joget.apps.form.model.FormData formData,java.util.Map dataModel)包含前端用户界面错误的HTML模板。这个方法将调用抽象方法 renderTemplate 进行渲染。
参数:
- dataModel - 包含要在模板中显示的值的模型。
renderReadOnlyTemplate
public java.lang.String renderReadOnlyTemplate(org.joget.apps.form.model.FormData formData,java.util.Map dataModel)用于前端UI的只读HTML模板(目前未使用)
参数:
- dataModel - 包含要在模板中显示的值的模型。
continueValidation
public boolean continueValidation(org.joget.apps.form.model.FormData formData)标记以指示是否继续验证后代元素。
getDynamicFieldNames
public Collection <java.lang.String> getDynamicFieldNames()用于通过返回额外的列名称在数据库中创建多个表单数据列。
hasError
public java.lang.Boolean hasError(org.joget.apps.form.model.FormData formData)标记以指示该字段是否通过了验证过程
isAuthorize
public java.lang.Boolean isAuthorize(org.joget.apps.form.model.FormData formData)标记以指示当前登录用户是否有权在表单中查看该字段。
它使用属性键"权限"来检索表单权限插件。
效用方法
getChildren
public java.util.Collection <org.joget.apps.form.model.Element> getChildren()检索此字段下的所有子表单字段元素
getChildren
public void setChildren(java.util.Collection <org.joget.apps.form.model.Element> children)检索此字段下的所有子表单字段元素
setChildren
public void setChildren(java.util.Collection <org.joget.apps.form.model.Element> children)将表单字段设置为此字段的子项
getParent
public org.joget.apps.form.model.Element getParent() 返回此元素的直接父项。
setParent
public void setParent(org.joget.apps.form.model.Element parent)设置此元素的直接父级。
getPrimaryKeyValue
public java.lang.String getPrimaryKeyValue(org.joget.apps.form.model.FormData formData)返回当前元素的主键值。默认为表单的主键值。
getLoadBinder
public org.joget.apps.form.model.FormLoadBinder getLoadBinder()获取加载绑定器
setLoadBinder
public void setLoadBinder(org.joget.apps.form.model.FormLoadBinder loadBinder)设置装订夹
getOptionsBinder
public org.joget.apps.form.model.FormLoadBinder getOptionsBinder()获取选项活页夹
setOptionsBinder
public void setOptionsBinder(org.joget.apps.form.model.FormLoadBinder optionsBinder)设置选项活页夹
getStoreBinder
public org.joget.apps.form.model.FormStoreBinder getStoreBinder()获取商店活页夹
setStoreBinder
public void setStoreBinder(org.joget.apps.form.model.FormStoreBinder storeBinder)设置商店活页夹
getValidator
public org.joget.apps.form.model.Validator getValidator()获取验证器
setValidator将
public void setValidator(org.joget.apps.form.model.Validator validator)设置一个验证器
getCustomParameterName
public java.lang.String getCustomParameterName()如果非null,则将其用作元素的HTML输入名称。
setCustomParameterName
public void setCustomParameterName(java.lang.String customParameterName)为元素的HTML输入名称设置自定义参数名称。
getDefaultPropertyValues
public java.lang.String getDefaultPropertyValues()将默认插件属性选项值设置为在窗体生成器中添加一个新的字段。
org.joget.apps.form.model.AbstractSubForm
- 在wflow-core模块下
- 扩展 org.joget.apps.form.model.Element。
- 实现了 org.joget.apps.form.model.FormContainer。
- 用于开发一个嵌入Form作为其子的Form Field元素。
字段细节
常量
PROPERTY_PARENT_SUBFORM_ID
public static final String PROPERTY_PARENT_SUBFORM_ID ="parentSubFormId";用于检索父窗体中的字段ID的属性键,用于将子窗体主键存储为引用键。
PROPERTY_SUBFORM_PARENT_ID
public static final String PROPERTY_SUBFORM_PARENT_ID ="subFormParentId";用于检索子窗体中的字段ID的属性键,用于将父窗体主键存储为外键。
方法细节
可重写的方法
loadSubForm
受保护的org.joget.apps.form.model.Form loadSubForm(org.joget.apps.form.model.FormData parentFormData)throws org.springframework.beans.BeansException以表格形式检索Form对象。此方法将使用属性键"formDefId"或"json"中的任一值 来构造Form对象。
updateElementParameterNames
protected void updateElementParameterNames(org.joget.apps.form.model.Element element,java.lang.String prefix)使用前缀更新子表单中字段元素的所有参数名称
populateParentWithSubFormKey
protected void populateParentWithSubFormKey(org.joget.apps.form.model.FormData formData)根据此常数PROPERTY_PARENT_SUBFORM_ID的属性键,使用子窗体的主键更新父窗体字段值 。
populateSubFormWithParentKey
protected void populateSubFormWithParentKey(org.joget.apps.form.model.FormData formData)根据此常量PROPERTY_SUBFORM_PARENT_ID的属性键,使用父表单的主键更新子表单字段值 。
checkForRecursiveForm
protected boolean checkForRecursiveForm(org.joget.apps.form.model.Element e,java.lang.String id)检查子表单不存在于父元素树中。
getSubForm
受保护的org.joget.apps.form.model.Form getSubForm(org.joget.apps.form.model.FormData formData)从其子对象获取对象。
接口
org.joget.apps.form.model.FormBuilderPaletteElement
- 在wflow-core模块下
- 扩展接口org.joget.apps.form.model.FormBuilderEditable。
- 描述用于将元素添加到Form Builder调色板中的元信息的接口。
方法细节
接口方法
getFormBuilderCategory
public java.lang.String getFormBuilderCategory()“表单构建器”调板中元素的类别
getFormBuilderPosition
public int getFormBuilderPosition()订购位置。调色板根据位置值以类别的升序显示。
getFormBuilderIcon
public java.lang.String getFormBuilderIcon()“窗体构建器”调板中元素的图标路径。这条路径是相对于上下文路径的。返回NULL以使用默认图标。
getDefaultPropertyValues
public jva.lang.String getDefaultPropertyValues()将默认插件属性选项值设置为在窗体生成器中添加一个新的字段。这个方法在org.joget.apps.form.model.Element中实现。
getFormBuilderTemplate
public java.lang.String getFormBuilderTemplate()用于在Form Builder中显示新添加字段的HTML模板
org.joget.apps.form.model.FormContainer
在wflow-core模块下
这个接口表明一个表单域元素是一个容器,不应该在数据库中创建一个表单数据列。
- 在这个界面中没有可用的接口方法
org.joget.apps.form.model.FormOptionsElement
在wflow-core模块下
此界面表明,表单域元素是一个多选项字段,如选择框,复选框和单选按钮。它可以使用表单选项 活页夹来填充它的选项。
在这个界面中没有可用的接口方法
org.joget.apps.form.model.FormAjaxOptionsElement
在wflow-core模块下
- 扩展接口 org.joget.apps.form.model.FormOptionsElement。
此界面表明,表单域元素是一个多选项字段,如选择框,复选框和单选按钮。它可以使用Form Options Binder 来实现org.joget.apps.form.model.FormAjaxOptionsBinder 来使用AJAX填充它的选项。
方法细节
接口方法
getControlElement
public org.joget.apps.form.model.Element getControlElement(org.joget.apps.form.model.FormData formData)获取用于控制此字段的选项的相关字段元素
org.joget.apps.form.model.FormReferenceDataRetriever
在wflow-core模块下
- 指出该字段包含其他表单数据记录的主键。引用记录可以使用其接口方法进行检索。
- org.joget.apps.form.service.FormUtil.loadFormData()和 org.joget.apps.form.service.FormUtil.loadFormDataJson()方法使用该接口 来提取表单数据值,包括子表单中的数据和引用领域。
方法细节
接口方法
loadFormRows
public org.joget.apps.form.model.FormRowSet loadFormRows(String [] primaryKeyValues,org.joget.apps.form.model.FormData formData)检索指定主键值数组的表单数据行。
插件属性选项
- 以下是一些必需的属性,系统预定义的属性可用于您的插件属性选项JSON文件。有关更多信息,请参阅 插件属性选项和配置。
必要属性
ID
- 所有表单元素字段必须具有此属性出现在属性选项JSON中。
- 这被用作表单中字段的唯一标识符。
{
name:'loadBinder',
label:'@@form.subform.loadBinder@@',
type:'elementselect',
options_ajax:'[CONTEXT_PATH]/web/property/json/getElements?classname=org.joget.apps.form.model.FormLoadElementBinder',
url:'[CONTEXT_PATH]/web/property/json[APP_PATH]/getPropertyOptions',
value:'org.joget.apps.form.lib.WorkflowFormBinder',
required:'True'
}
预定义的属性
loadBinder
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以选择“表单加载活页夹”。
- 该属性的值将自动转换成表单加载活页夹插件,并可以通过getLoadBinder 方法检索插件。
{
name : 'optionsBinder',
label : '@@form.checkbox.chooseOptionsBinder@@',
type : 'elementselect',
options_ajax : '[CONTEXT_PATH]/web/property/json/getElements?classname=org.joget.apps.form.model.FormLoadOptionsBinder',
url : '[CONTEXT_PATH]/web/property/json[APP_PATH]/getPropertyOptions'
}
optionsBinder
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以选择“表单选项”活页夹。
该属性的值将自动转换成表单选项活页夹插件,该插件可以通过getOptionsBinder 方法检索 。
{ 名称:'optionsBinder', 标签:'@@ form.checkbox.chooseOptionsBinder @@', 键入:'elementselect', options_ajax:'[CONTEXT_PATH] /web/property/json/getElements?classname=org.joget.apps.form.model.FormLoadOptionsBinder', url:'[CONTEXT_PATH] / web / property / json [APP_PATH] / getPropertyOptions' }
permission
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以选择“表单权限”。
- 这个属性的值将自动转换成Form Permission Plugin,这个插件被 isAuthorize 方法使用。
{
name:'permission',
label:'@@form.form.permission@@',
type:'elementselect',
options_ajax:'[CONTEXT_PATH]/web/property/json/getElements?classname=org.joget.apps.form.model.FormPermission',
url:'[CONTEXT_PATH]/web/property/json[APP_PATH]/getPropertyOptions'
}
storeBinder
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以选择一个表单存储区活页夹。
- 这个属性的值会自动转换成Form Store Binder插件,插件可以通过getSoreBinder 方法来获取 。
{
name:'storeBinder',
label:'@@form.form.storeBinder@@',
type:'elementselect',
options_ajax:'[CONTEXT_PATH]/web/property/json/getElements?classname=org.joget.apps.form.model.FormStoreElementBinder',
url:'[CONTEXT_PATH]/web/property/json[APP_PATH]/getPropertyOptions'
}
只读
- 系统使用此属性来标记一个字段只读。
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以强制该字段显示为只读。
- 如果父窗体设置为只读,则此值将被忽略
{
name : 'readonly',
label : '@@form.checkbox.readonly@@',
type : 'checkbox',
value : 'false',
options : [{
value : 'true',
label : ''
}]
}
readonlyLabel
- 系统使用此属性来标记只读字段应该显示为标签的字段。
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以强制该字段在只读时显示为标签。
- 如果父窗体是只读的,则该值被忽略
{
name : 'readonlyLabel',
label : '@@form.checkbox.readonlyLabel@@',
type : 'checkbox',
value : 'false',
options : [{
value : 'true',
label : ''
}]
}
workflowVariable
- 如果此属性显示在“属性选项JSON”中,则管理员用户设置为将此字段值存储到工作流程变量。
- 如果Form Store Binder设置为工作流表单绑定器,则该字段的值将自动设置为所提到的工作流变量 。
{
name : 'workflowVariable',
label : '@@form.checkbox.workflowVariable@@',
type : 'textfield'
}
值
- 如果此属性显示在“属性选项JSON”中,则admin用户可以为此字段设置默认值。
{
name : 'value',
description : '@@form.checkbox.value.desc@@',
label : 'Default @@form.checkbox.value@@',
type : 'textfield'
}
验证器
- 如果此属性显示在“属性选项JSON”中,则管理员用户可以选择“表单验证器”。
- 这个属性的值会自动转换成表单验证器插件,插件可以通过getValidator方法获取 。
表单字段元素模板示例
以下是文本字段元素的示例表单字段模板 。它使用FreeMaker语法构造。这个模板将被renderTemplate方法使用并返回。
@Override
public String renderTemplate(FormData formData, Map dataModel) {
String templateName = "textField.ftl";
// set value
String value = FormUtil.getElementPropertyValue(this, formData);
dataModel.put("value", value);
String html = FormUtil.generateElementHtml(this, formData, templateName, dataModel);
return html;
}
<div class="form-cell" ${elementMetaData!}>
<label class="label">
${element.properties.label} <span class="form-cell-validator">${decoration}</span>
<#if error??>
<span class="form-error-message">${error}</span>
</#if>
</label>
<#if (element.properties.readonly! == 'true' && element.properties.readonlyLabel! == 'true') >
<div class="form-cell-value"><span>${value!?html}</span></div>
<input id="${elementParamName!}" name="${elementParamName!}" type="hidden" value="${value!?html}" />
<#else>
<input id="${elementParamName!}" name="${elementParamName!}" type="text" size="${element.properties.size!}" value="${value!?html}" maxlength="${element.properties.maxlength!}" <#if error??>class="form-error-cell"</#if> <#if element.properties.readonly! == 'true'>readonly</#if> />
</#if>
</div>
说明
- 表单字段元素模板应该用“form-cell”类包装在div下。"form-cell" class.
$ {elementMetaData!}需要放在“.form-cell”div中。它由Form Builder使用。".form-cell" div. It is used by Form Builder.
- 可用的字段元素模板必须处理字段的以下状态。
- 有错误
- 只读
- 只读,需要显示为标签
- 正常显示
教程
相关的社区插件
- 复选框
org.joget.apps.form.lib.CheckBox(wflow-core) - 自定义HTML
org.joget.apps.form.lib.CustomHTML(wflow-core) - 日期选择器
org.joget.apps.form.lib.DatePicker(wflow-core) - 文件上传
org.joget.apps.form.lib.FileUpload(wflow-core) - 网格
org.joget.apps.form.lib.Grid(wflow-core) - 隐藏字段
org.joget.apps.form.lib.HiddenField(wflow-core) - Id生成器字段
org.joget.apps.form.lib.IdGeneratorField(wflow-core) - 密码字段
org.joget.apps.form.lib.PasswordField(wflow-core) - 单选按钮
org.joget.apps.form.lib.Radio(wflow-core) - 选择框
org.joget.apps.form.lib.SelectBox(wflow-core) - 子
表单org.joget.apps.form.lib.SubForm(wflow-core) - 文本区域
org.joget.apps.form.lib.TextArea(wflow-core) - 文本字段
org.joget.apps.form.lib.TextField(wflow-core)