用法

抽象类

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

字段细节

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

方法细节

接口方法
getControlElement
public org.joget.apps.form.model.Element getControlElement(org.joget.apps.form.model.FormData formData)

获取用于控制此字段的选项的相关字段元素

org.joget.apps.form.model.FormReferenceDataRetriever

方法细节

接口方法
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)

 

 

  • No labels