Adobe CQ5 - 从外部数据库填充下拉列表

时间:2013-09-12 06:51:09

标签: java html oracle adobe cq5

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

我用谷歌搜索了它,但是如果有人做过任何这样的事情就找不到任何解决办法,请告诉我。

3 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。第一个考虑因素是数据在数据库中的变化频率,以及db和cq5服务器之间的延迟。

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

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

如果您公开显示下拉列表,那么放置它的好地方就是在结构中的/ content目录中,或者如果您认为它更符合应用程序代码的内容,则在适当的位置/ etc目录是公开的。

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

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

如果您需要对这些解决方案进行任何详细说明,请与我们联系。

答案 1 :(得分:0)

我认为您的小部件应为compositeField。您可以在示例1:自定义多字段小部件 enter image description here

中的http://dev.day.com/docs/en/cq/current/developing/widgets.html找到一些有用的内容。

我发现它非常适合您的需要。

答案 2 :(得分:0)

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

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

下拉列表的对话框中的

Selection widget。同一节点需要一个“options”属性,它是服务的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"}
]