1

我需要创建一个自定义小部件,该小部件将具有下拉菜单和少量文本字段。.下拉列表应该由从外部数据库检索到的数据填充。

我已经用谷歌搜索了它,但如果有人做过这样的事情,没有找到解决方案,请告诉我。

4

3 回答 3

0

我认为你的小部件应该是compositeField. 您可以在示例 1:自定义多字段小部件中的http://dev.day.com/docs/en/cq/current/developing/widgets.html找到一些有用的东西 在此处输入图像描述

我看到它非常适合您的需求。

于 2013-09-12T18:45:55.243 回答
0

您似乎要求动态填充下拉列表。这需要 2 个部分。

来自http://dev.day.com/docs/en/cq/current/developing/widgets.html#Dynamic+Dialogs

下拉对话框中的选择小部件。同一个节点需要一个“选项”属性,即服务的 url。

该服务应提供 JSON 数据用于显示与价值。

<items jcr:primaryType="cq:WidgetCollection">
    <myDropDown
        jcr:primaryType="cq:Widget"
        name="./myDropDown"
        fieldLabel="Dyanmic values from DB:"
        type="select"
        xtype="selection"
        options="${serviceURL}.json"
    />
</items>

响应 ${serviceURL} 的 servlet 需要返回一个 JSON 文本数组,值对(显然是根据您的数据库查询构建的)。例如:

[
    {value: "first val", text: "Display in Dialog"},
    ...
    {value: "last val", text: "Display Text"}
]
于 2013-09-15T19:09:32.653 回答
0

有几种方法可以解决这个问题。首先要考虑的是您的数据从数据库中更改的频率,以及数据库和 cq5 服务器之间的延迟。

如果数据不经常变化,只需要手动或定期更新,可以考虑从数据库中提取信息,然后将其转换为 JCR 中的结构。从那里,您可以在 Sling 中使用开箱即用的 json 转换器,方法是点击带有 .json 扩展名的节点 url。即与您将内容节点视为 json localhost:4502/content/geometrixx/en.infinity.json 的方式相同

假设这是一个作者实例,您应该考虑将下拉结构放在 /apps 目录中,如果您想在它被激活时将其隐藏起来,以防它被激活。

如果您要公开显示下拉列表,则可以将其放置在结构中的 /content 目录中,或者如果您认为它更符合应用程序代码的内容,则放置在 /etc 目录中的适当位置这是公开的。

第二个选项,如果您希望每次都调用数据库以获取下拉信息,是创建一个自定义 sling servlet,(参见http://www.therealcq.blogspot.com.au/2013/01/how-to -write-custom-slingservlet.html以获得基本的了解)。

在那里,建立与数据库的连接,进行相关的 SQL 调用,将其转换为 JSON 并将其作为端点返回。如果您强制它具有 .json 扩展名,请确保您的调度程序没有不恰当地缓存答案,就像您选择了此选项一样,下拉列表中的数据将是上下文相关的或快速移动的。

如果您需要详细说明这些解决方案,请告诉我。

于 2013-09-12T08:22:48.303 回答