我一直在尝试在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
重要提示: 我的所有捆绑包都是有效的
答案 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文件夹中。