我在将Hippo CMS中的Spring与目录结合使用时遇到了问题。
我的目录配置了 componentclassname:ServiceLinkListComponent 所以我可以拖动&将组件放入通道管理器中页面上的占位符。
在http://svn.onehippo.org/repos/hippo/hippo-cms7/testsuite/trunk/跟随示例后,我添加了Spring支持,因此我必须将componentclassname更改为 componentclassname:SpringBridgeHstComponent
不幸的是,我无法再将任何Document链接到组件,因为 @ParametersInfo无法识别因为它位于SpringBridgeHstComponent中的bean中。
如何使用spring托管目录组件?
组件类
@ParametersInfo(type = ServiceLinkListComponentInfo.class)
@Component
@Scope(value = "prototype")
public class ServiceLinkListComponent extends CommonComponent {
private static Logger log = LoggerFactory.getLogger(ServiceLinkListComponent.class);
@Autowired
public TestService testService;
@Override
public void doBeforeRender(final HstRequest request, final HstResponse response) {
super.doBeforeRender(request, response);
final ServiceLinkListComponentInfo paramInfo = getComponentParametersInfo(request);
final String documentPath = paramInfo.getDocument();
log.debug("Calling EssentialsDocumentComponent for document path: [{}]", documentPath);
//String test = testService.test();
setContentBeanForPath(documentPath, request, response);
request.setAttribute(REQUEST_ATTR_PARAM_INFO, paramInfo);
}
}
服务类
@Component("testService")
public class TestService {
public String test(){
return "hello";
}
}
applicationContext.xml(在resources / META-INF.hst-assembly.overrides中)
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.xxx.yyy" />
</beans>
回购
答案 0 :(得分:0)
我找到了一种方法来做我想做的事,但我认为这是一个肮脏的解决方法。也许HippoCMS的一些人可以在这里提供帮助。
我创建了另一个类:
@ParametersInfo(type = ServiceLinkListComponentInfo.class)
public class ServiceLinkListSpringHstComponent extends SpringBridgeHstComponent {}
需要在目录中设置此类(而不是SpringBridgeHstComponent)。我也尝试了一个嵌套类来摆脱第二个文件,但是hippo找不到它。
答案 1 :(得分:0)
我是桥梁类的原作者。我想你已经找到了当前的限制和合理的解决方法。 : - )
我同意解决方案解决方案不太理想,因为您需要添加尽可能多的子类SpringBridgeHstComponent作为组件配置。
请你在这里提交一张JIRA票据来改善吗? - https://issues.onehippo.com/projects/HSTTWO
顺便说一句,我原本以为这只能在桥类级别进行改进,但似乎需要改进容器级别(特别是相关模块(用于定位))。因此,需要对该模块进行更多调查。