如何在 Magnolia Blossom 中进行 AJAX 调用?

Posted

技术标签:

【中文标题】如何在 Magnolia Blossom 中进行 AJAX 调用?【英文标题】:How to make an AJAX call in Magnolia Blossom? 【发布时间】:2015-05-08 12:21:42 【问题描述】:

我是木兰花的新手。

我必须在 Blossom 的应用程序中执行 AJAX 调用。 我们每个组件都有一个控制器。所以我无法发出AJAX 请求。

谁能建议我如何做到这一点?

【问题讨论】:

【参考方案1】:

您可以定义一个不同的 Servlet(和 Web 应用程序上下文),您可以定义一个 Servlet 来处理从 /rest/* 开始的所有请求,然后在您的 web.xml 中的下面,您可以定义开花 Servlet。 剩下的就是配置了,试试看如何创建一个有2个不同上下文的webapp。

【讨论】:

【参考方案2】:

进入 servlet 容器的请求无法访问您用于呈现内容的控制器。没有内容,它们就毫无用处,也不会产生有意义的输出。您需要一个单独的 DispatcherServlet 来处理这些 AJAX 请求。

有两种方法可以实现这一点。您可以将新的 DispatcherServlet 添加到 web.xml,也可以将 servlet 添加到安装模块时安装的模块。

后者是更好的选择,因为您不需要拥有两个单独的 ApplicationContext。启动时在模块中创建的将是两个 DispatcherServlet 的父级,因此两者都可以访问其中的 bean。您也不需要更新 web.xml,这使得模块安装和 Magnolia 升级更容易。

在你的模块描述符中添加这个 sn-p:

<servlets>
  <servlet>
    <name>dispatcher</name>
    <class>org.springframework.web.servlet.DispatcherServlet</class>
    <mappings>
      <mapping>/ajax/*</mapping>
    </mappings>
    <params>
      <param>
        <name>contextConfigLocation</name>
        <value>classpath:/ajax-servlet.xml</value>
      </param>
    </params>
  </servlet>
</servlets>

Magnolia wiki https://wiki.magnolia-cms.com/display/WIKI/Adding+a+DispatcherServlet+to+a+Blossom+module 中描述了此主题和其他主题

【讨论】:

嗨@sigget,可以做更多澄清,因为我对开花很陌生。开花中的模块描述符是什么?是 *module.xml 文件吗?如果我们在这里添加,那么下一步要做什么? 如果您有任何示例示例,它会更有帮助。谢谢。 是的,模块描述符是您的 src/main/resources/META-INF/magnolia/.xml 文件。更新后,您需要重新安装模块。 ajax-servlet.xml 文件的内容是什么。在模块描述符中配置之后,我们如何编写特定于 AJAX 调用的控制器。如果我们可以通过ajax请求访问控制器,那么我们可以编写一个简单的spring控制器。对吗? ajax-servlet.xml 将是一个普通的 Spring bean 定义 xml 文件。编写控制器是普通的 Spring 风格。【参考方案3】:

根据你想得到什么,你也可以使用 Magnolia 的 REST 模块。例如阅读网站标题,您可以拨打http://localhost:8080/magnoliaAuthor/.rest/properties/v1/website/demo-project/siteTitle 更多详细信息documentation

您还可以使用 REST 模块通过注释源代码来非常轻松地添加您自己的端点。

HTH, 一月

【讨论】:

以上是关于如何在 Magnolia Blossom 中进行 AJAX 调用?的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia Blossom : 两个页面共享同一个区域

从另一个 Magnolia 模块访问 Spring 服务(不使用 Spring Blossom)

Magnolia CMS 与 Blossom + spring 安全性

在 Spring MVC 中集成 Magnolia

未找到 Magnolia 的 Gradle 依赖项

Magnolia CMS 中的 RichText 正在更改 HTML 文本