【发布时间】:2013-09-12 06:51:08
【问题描述】:
我需要创建一个自定义小部件,该小部件将具有下拉菜单和少量文本字段。 .下拉列表应填充从外部数据库检索到的数据。
我已经用谷歌搜索了它,但如果有人做过任何此类事情,但没有找到解决方案,请告诉我。
【问题讨论】:
标签: java html oracle adobe aem
我需要创建一个自定义小部件,该小部件将具有下拉菜单和少量文本字段。 .下拉列表应填充从外部数据库检索到的数据。
我已经用谷歌搜索了它,但如果有人做过任何此类事情,但没有找到解决方案,请告诉我。
【问题讨论】:
标签: java html oracle adobe aem
有几种方法可以解决这个问题。首先要考虑的是您的数据在 db 中更改的频率,以及 db 和 cq5 服务器之间的延迟。
如果数据不经常变化,只需要手动更新,或者定期更新,你可以考虑从数据库中提取信息,然后将其转换为JCR中的结构。从那里,您可以在 Sling 中使用开箱即用的 json 转换器,方法是点击带有 .json 扩展名的节点 url。 IE。与您将内容节点视为 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 扩展名,请确保您的调度程序没有不恰当地缓存答案,就像您选择了此选项一样,下拉列表中的数据将是上下文相关的或快速移动的。
如果您需要详细说明这些解决方案,请告诉我。
【讨论】:
我认为您的小部件应该是compositeField。您可以在 Example 1: Custom Multifield Widget
我认为它非常适合您的需要。
【讨论】:
您似乎要求动态填充下拉菜单。这需要 2 个部分。
来自http://dev.day.com/docs/en/cq/current/developing/widgets.html#Dynamic+Dialogs
Selection widget 在下拉对话框中。同一个节点需要一个“选项”属性,即服务的 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"}
]
【讨论】: