2

我一直在尝试将 Spring 框架集成到 AEM6/CQ5 中。

我正在关注本教程。关联

根据教程,我已经安装了 NEBA 包。所有 NEBA 包都在 OSGi 控制台中处于活动状态。

然后我创建了自己的 Maven CQ5 项目,添加了 Neba 注释和 Spring 的依赖项。我的项目也成功部署在 CQ5 中(捆绑包处于活动状态)。

我尝试使用 NEBA 的 ResourceModel 注释。但是这个模型并没有出现在 NEBA 的模型注册表中。我将 ResourceModel 映射到我创建的“linkComponent”的内容组件。

当用户将其拖放到任何 parsys 上时,资源节点具有属性linkNamelinkURL

我尝试在 JSP 中访问这些值,但失败了。

请参见下面的代码:package com.zensar.neba;

import org.apache.sling.api.resource.Resource;

import io.neba.api.annotations.Path;
import io.neba.api.annotations.ResourceModel;

@ResourceModel(types = "zensar-neba/components/content/linkComponent")
public class LinkComponent {

    private String linkName;
    private String linkURL;

    public String getLinkName() {
        return linkName;
    }
    public void setLinkName(String linkName) {
        this.linkName = linkName;
    }
    public String getLinkURL() {
        return linkURL;
    }
    public void setLinkURL(String linkURL) {
        this.linkURL = linkURL;
    }


}

请参阅下面的linkComponent的 JSP 代码:

<%@include file="/libs/foundation/global.jsp"%>
<%@taglib prefix="neba" uri="http://neba.io/1.0"%>
<neba:defineObjects />
Link Component
<a href="${m.linkURL}"> Click Here ${m.linkName}</a>

然后我尝试使用Spring 注释创建一个控制器,但我得到“找不到路径”我错过了什么。

请看下面的代码:

package com.zensar.neba;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class DemoController {
    @RequestMapping("/echo/{param}")
    @ResponseBody
    public String echo(@PathVariable("param") String paramToEcho) {
       return "Hello "+ paramToEcho;
    }
}

我将控制器链接称为:http://localhost:4502/bin/mvc.do/echo/Oliver

重要提示:我所有的捆绑包都处于活动状态

4

2 回答 2

1

如果所有捆绑包都已启动并运行,并且您看到模型注册表,则表示一切运行顺利。但是:你的模型没有出现,这意味着你的包的应用程序上下文没有运行。NEBA 使用gemini-blueprint,它是OSGi 蓝图规范的参考实现。

您的捆绑包的 OSGI-INF/blueprint 文件夹中是否有 xml 文件,例如 blueprint.xml?它应该如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
   http://www.osgi.org/xmlns/blueprint/v1.0.0
   http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:component-scan base-package="com.zensar.neba" />
</beans>

如果你这样做了,当你的包启动时你的 error.log 会说什么?作为参考,这里是一个使用 NEBA 的示例 webapp:https ://github.com/unic/publication-neba-adaptto-2015

还有一件事:NEBA 使用私有字段注入,因此您的 bean 上不需要任何设置器。

于 2016-07-05T23:37:09.300 回答
1

我很高兴能帮上忙!只是为了回答您的最后一个问题:在 maven 项目中,蓝图 XML 文件的正确位置应位于包含您的模型/控制器的 maven 模块的 src/main/resources/OSGI-INF/blueprint 文件夹中。

于 2016-07-08T12:25:27.200 回答