集成AEM / CQ5和Spring Framework?

时间:2016-06-17 07:02:41

标签: spring spring-mvc cq5 aem aem-6

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

我正在学习本教程。 LINK

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

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

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

当用户在任何解析中拖放它时,资源节点具有 linkName linkURL 属性。

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

请参阅以下代码:     包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

重要提示: 我的所有捆绑包都是有效的

2 个答案:

答案 0 :(得分:1)

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

你有一个xml文件,例如blueprint.xml,在捆绑包的OSGI-INF / blueprint文件夹中?它应该是这样的:

<?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上安装任何setter。

答案 1 :(得分:0)

我很乐意帮助你!回答你的上一个问题:在maven项目中,蓝图XML文件的正确位置将位于包含模型/控制器的maven模块的src / main / resources / OSGI-INF / blueprint文件夹中。