表单的基本结构是:
所有这些都是通过一系列默认表单组件实现的,这些组件在标准AEM安装中可用。
除了开发新组件以用于表单之外,您还可以:
在必 要时使用脚本扩展功能。
表单开始组件为加载路径提供一个字段,该字段是指向存储库中节点的可选路径。
加载路径是用于将预定义值加载到表单上多个字段的节点属性的路径。
这是指定库中节点的路径的可选字段。如果此节点具有与字段名称相匹配的属性,则表单上的相应字段将随这些属性的值预加载。如果不存在任何匹配,则字段将包含默认值。
表单操作还可以设置从中加载初始值的资源。 在init.jsp
内使用FormsHelper#setFormLoadResource
完成此操作。
仅当未设置此设置时,作者才会从开始表单组件中设置的路径填充表单。
各种表单字段还具有项目加载路径,同样是指向存储库中节点的可选路径。
项目加载路径是用于将预定义值加载到表单上特定字段的节点属性的路径,例如下拉列表、复选框组或单选按钮组。
可以使用选择的值范围配置下拉列表。
项目加载路径可用于从存储库中的文件夹访问列表,并将这些项预加载到字段中:
新建sling文件夹(sling:Folder
)
例如/etc/designs/<myDesign>/formlistvalues
添加多值字符串类型(String[]
)的新属性(例如myList
)以包含下拉项的列表。 还可以使用脚本导入内容,如使用JSP脚本或shell脚本中的cURL。
在“项目加载路径”字段中使用完整路径:
例如/etc/designs/geometrixx/formlistvalues/myList
请注意,如果String[]
中的值的格式如下:
AL=Alabama
AK=Alaska
然后AEM将生成列表为:
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
例如,此功能可在多语言设置中得到很好的使用。
一个表单需要一项操作。操作定义在随用户数据提交表单时执行的操作。
标准AEM安装提供了一系列操作,这些操作可在以下位置查看:
/libs/foundation/components/form/actions
在Form组件的操作类型列表中:
本节介绍如何开发自己的表单操作以包含在此列表中。
您可以在/apps
下添加您自己的操作,如下所示:
创建类型为sling:Folder
的节点。 指定反映要实施的操作的名称。
例如:
/apps/myProject/components/customFormAction
在此节点上定义以下属性,然后单击全部保存以保留您所做的更改:
sling:resourceType
-设置为 foundation/components/form/action
componentGroup
-定义为 .hidden
可选:
jcr:title
-指定您选择的标题,此标题将显示在下拉选择列表中。如果未设置,则显示节点名称jcr:description
-输入您选择的说明在文件夹中,创建一个对话框节点:
在文件夹中,创建以下任一项:
帖子脚本。
脚本的名称为post.POST.<extension>
,例如post.POST.jsp
提交表单以处理表单时将调用post脚本,它包含处理从表单POST
到达的数据的代码。
添加提交表单时调用的前向脚本。
脚本的名称为forward.<extension
>,如forward.jsp
此脚本可以定义路径。 然后,当前请求将转发到指定路径。
必要的调用为FormsHelper#setForwardPath
(2个变体)。 典型情况是执行一些验证或逻辑,以查找目标路径,然后转发到该路径,让默认的SlingPOSTservlet在JCR中执行实际存储。
还可能有另一个Servlet进行实际处理,在这种情况下,表单操作和forward.jsp
将仅充当“glue”代码。 例如,/libs/foundation/components/form/actions/mail
的邮件操作将详细信息转发到邮件servlet所在的<currentpath>.mail.html
。
因此:
post.POST.jsp
对于操作本身完全完成的小操作很有用forward.jsp
仅在需要委派时很有用。脚本的执行顺序为:
呈现表单(GET
)时:
init.jsp
clientvalidation.jsp
clientvalidation.jsp
addfields.jsp
在内渲染 <form></form>
处理表单POST
时:
init.jsp
servervalidation.jsp
servervalidation.jsp
forward.jsp
FormsHelper.setForwardPath
),请转发请求,然后调用cleanup.jsp
post.POST.jsp
(在此结束,未调用cleanup.jsp
)再次在文件夹中选择添加:
用于添加字段的脚本。
脚本的名称为addfields.<extension>
,例如addfields.jsp
在为表单开始写入HTML后,将立即调用addfields脚本。 这允许操作在表单中添加自定义输入字段或其他类似HTML。
初始化脚本。
脚本的名称为init.<extension>
,例如init.jsp
呈现表单时将调用此脚本。 它可用于初始化操作特定信息。 "
清理脚本。
脚本的名称为cleanup.<extension>
,例如cleanup.jsp
此脚本可用于执行清除。
在parsys中使用Forms组件。 操作类型下拉列表现在将包含您的新操作。
要查看属于产品的默认操作:
/libs/foundation/components/form/actions
可以在两个级别施加限制:
您可以为单个字段(在/apps
下)添加您自己的约束,如下所示:
创建类型为sling:Folder
的节点。 指定反映要实现的约束的名称。
例如:
/apps/myProject/components/customFormConstraint
在此节点上定义以下属性,然后单击全部保存以保留您所做的更改:
sling:resourceType
-设置为 foundation/components/form/constraint
constraintMessage
-根据约束条件,在提交表单时显示的自定义消息(如果字段无效)
可选:
jcr:title
-指定您选择的标题,此标题将显示在选择列表中。如果未设置,则显示节点名称hint
-用户有关如何使用该字段的其他信息在该文件夹中,您可以需要以下脚本:
客户端验证脚本:
脚本的名称为clientvalidation.<extension>
,例如clientvalidation.jsp
呈现表单字段时将调用此字段。 它可用于创建客户端javascript以验证客户端上的字段。
服务器验证脚本:
脚本的名称为servervalidation.<extension>
,例如servervalidation.jsp
提交表单时将调用此设置。 它可用于在提交后验证服务器上的字段。
示例约束可在以下位置查看:
/libs/foundation/components/form/constraints
通过在开始表单组件(validationRT
)中配置资源类型来指定表单全局验证。 例如:
apps/myProject/components/form/validation
然后,您可以定义:
clientvalidation.jsp
—— 在字段的客户端验证脚本后注入servervalidation.jsp
—— 也在POST
的单个字段服务器验证后调用。您可以配置表单以根据表单中其他字段的值显示或隐藏表单组件。
当仅在特定条件下才需要表单字段时,更改表单字段的可见性很有用。例如,在反馈表单中,有一个问题询问客户是否希望通过电子邮件向他们发送产品信息。选择“是”时,随即显示一个文本字段让客户键入他们的电子邮件地址。
使用编辑显示/隐藏规则对话框指定显示或隐藏表单组件的条件。
使用对话框顶部的字段可指定以下信息:
这些字段下显示一个或多个条件。条件将其他表单组件(同一表单上)的值与某个值进行比较。如果字段中的实际值满足条件,那么条件为真。条件包括以下信息:
例如,标题为Receive email notifications?
* *的单选按钮组组件包含Yes
和No
单选按钮。 标题为Email Address
的文本字段组件使用以下条件,以便在选择Yes
时显示它:
在 Javascript 中,条件使用元素名称属性的值引用字段。在上一个示例中,单选按钮组组件的元素名称属性为contact
。 下面的代码是该示例等效的 Javascript 代码:
((contact == "Yes"))
显示或隐藏表单组件:
编辑特定表单组件。
选择显示/隐藏以打开编辑显示/隐藏规则对话框:
在第一个下拉列表中,选择显示或隐藏,以指定条件确定显示还是隐藏组件。
在顶行末尾的下拉列表中,选择:
在条件行(一个显示为默认值)中,选择组件、运算符,然后指定值。
如果需要,可单击添加条件添加更多条件。
例如:
单击确定以保存定义。
保存定义后,表单组件属性中的显示/隐藏选项旁边将显示一个编辑规则链接。 单击此链接可打开编辑显示/隐藏规则对话框进行更改。
单击确定以保存所有更改。
可以查看和测试显示/隐藏定义的效果:
显示/隐藏条件使用元素名称属性值引用表单中的其他组件。当任何条件引用已删除或已更改元素名称属性的组件时,显示/隐藏配置无效。 出现这种情况时,您需要手动更新条件,否则加载表单时会发生错误。
当显示/隐藏配置无效时,该配置仅作为JavaScript代码提供。 编辑代码以纠正问题。代码使用最初用于引用组件的元素名称属性。
有关在编写脚本时可用的API元素的详细信息,请参阅与表单](https://helpx.adobe.com/cn/experience-manager/6-4/sites/developing/using/reference-materials/javadoc/com/day/cq/wcm/foundation/forms/package-summary.html)相关的[javadocs。
您可以将此功能用于以下操作:在提交表单之前调用服务,如果服务失败,则取消服务:
定义验证资源类型
包含验证脚本:
com.day.cq.wcm.foundation.forms.ValidationInfo
对象。如果存在错误,将不会发布表单数据。