2016-06-17 62 views
2

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

我正在学习本教程。 LINK

根据教程我安装了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; 
    } 


} 

请参见JSP代码下面linkComponent的:

<%@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> 

然后我试图使用春注解创建控制器但我得到“找不到路径”我是什么失踪。下面

请参阅代码:

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

重要提示: 我所有的包都主动

回答

1

如果所有的包正在运行并且您正在看到模型注册表,这意味着e一切顺利。但是:您的模型没有显示,这意味着您的包的应用程序上下文没有运行。 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在你的bundle开始时说什么? 作为参考,在这里是用NEBA样本Web应用程序:https://github.com/unic/publication-neba-adaptto-2015

一两件事:NEBA使用私有字段注入,所以你不需要对你的bean的任何setter方法。

+0

嗨@Olaf我没有这个XML文件。你能告诉我把这个文件放在我的CQ5 Maven项目中吗? – Oliver

+0

如果我有一亿美元,我会把它们给你。我添加了context.xml,并感谢所有工作 – Oliver

0

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