表单的基本结构是:
所有这些操作都通过一系列默认的表单组件实现,这些组件可在标准AEM安装中使用。
除了开发新组件以在表单上使用外,您还可以:
根据需要 使用脚本扩展功能。
本文档重点介绍如何在经典UI中使用Foundation Components开发表单。 Adobe建议利用新的核心组件和隐藏条件在触屏优化UI中进行表单开发。
表单开始组件为加载路径提供了一个字段,该路径是指向存储库中节点的可选路径。
Load Path是用于将预定义值加载到表单上多个字段中的节点属性的路径。
这是指定库中节点的路径的可选字段。如果此节点具有与字段名称相匹配的属性,则表单上的相应字段将随这些属性的值预加载。如果不存在任何匹配,则字段将包含默认值。
表单操作还可以设置从中加载初始值的资源。 这是在init.jsp
内使用FormsHelper#setFormLoadResource
完成的。
仅当未设置时,作者才会从开始表单组件中设置的路径填充表单。
各种表单字段还具有项目加载路径,这同样是指向存储库中节点的可选路径。
Items Load Path是节点属性的路径,用于将预定义值加载到表单上的特定字段中,例如下拉列表、复选框组或单选按钮组。
可以使用选择的值范围配置下拉列表。
项目加载路径可用于从存储库中的文件夹访问列表,并将这些列表预载到字段中:
创建新的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组件的Action Type列表中的:
本节介绍如何开发您自己的表单操作以包含在此列表中。
您可以在/apps
下添加自己的操作,如下所示:
创建类型为sling:Folder
的节点。 指定反映要实施的操作的名称。
例如:
/apps/myProject/components/customFormAction
在此节点上定义以下属性,然后单击Save All以保留更改:
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
在此节点上定义以下属性,然后单击Save All以保留更改:
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"))
要显示或隐藏表单组件,请执行以下操作:
编辑特定的表单组件。
选择显示/隐藏以打开编辑显示/隐藏规则对话框:
在第一个下拉列表中,选择Show或Hide ,以指定条件确定是显示还是隐藏组件。
在顶行末尾的下拉列表中,选择:
在条件行(一个显示为默认值)中,选择组件、运算符,然后指定一个值。
如果需要,可通过单击Add Condition添加更多条件。
例如:
单击确定以保存定义。
保存定义后,表单组件属性中的显示/隐藏选项旁边会显示一个编辑规则链接。 单击此链接可打开编辑显示/隐藏规则对话框以进行更改。
单击确定以保存所有更改。
可以查看和测试显示/隐藏定义的效果:
显示/隐藏条件使用元素名称属性值引用表单中的其他组件。当任何条件引用的组件已删除或已更改Element Name属性时,显示/隐藏配置无效。 出现这种情况时,您需要手动更新条件,否则加载表单时会发生错误。
当显示/隐藏配置无效时,该配置仅作为JavaScript代码提供。 编辑代码以更正问题。代码使用最初用于引用组件的元素名称属性。
有关在编写脚本时可使用的API元素的更多信息,请参阅与forms🔗相关的javaoc。
您可以将此操作用于各种操作,例如在提交表单之前调用服务,并在表单失败时取消服务:
定义验证资源类型
包含验证脚本:
com.day.cq.wcm.foundation.forms.ValidationInfo
对象。如果存在错误,将不会发布表单数据。