2014-01-28 55 views
2

在Liferay中,配置操作类是在liferay-portlet.xml中定义的 问题是,如果我使用任何弹簧依赖注入,它不起作用。Liferay配置操作类 - 弹簧依赖注入

<portlet> 
    <portlet-name>search</portlet-name> 
    <icon>/icon.png</icon> 
    <configuration-action-class>com.mypack.MyConfigurationAction</configuration-action-class> 
    <header-portlet-css>/css/main.css</header-portlet-css> 
    <footer-portlet-javascript>/js/main.js</footer-portlet-javascript> 
    <css-class-wrapper>search-portlet</css-class-wrapper> 
    <add-default-resource>true</add-default-resource> 
</portlet> 

Action类实现

public class MyConfigurationAction extends DefaultConfigurationAction { 

    private @Value("${test.property1}") String property1; 
    private @Value("${test.property2}") String property2; 
} 

如何注入这些属性到这个Action类,而不使用ClassPathXmlApplicationContext和硬编码spring.xml文件中的类

回答

2

有两种方式保存在Portlet开发[在Liferay中]喜好,

  1. 通过Liferay的具体方式,其采用的Liferay-portlet.xml的条目。不能用春天来管理。

  2. JSR-286 [portal agnostic],portlet编辑模式。

使用Spring MVC框架开发portlet时,建议使用portlet编辑模式。

在Spring MVC portlet框架中,可以通过portlet模式映射portlet请求。

例如:创建控制器类,如下所示,它将映射到编辑模式请求。

@Controller 
@RequestMapping("EDIT") 
public class PreferencesController 

用两种方法,一种方法与注释@RenderMapping,负责视图和其他方法与注释@的ActionMapping/@ RequestMapping负责存储偏好。

希望这会有所帮助。

+0

我在portlet.xml中启用了编辑模式,并按照您的说法完成。但是这个类没有被调用。只有当我点击配置时,请求总是以VIEW模式发送。如果我点击首选项,它就完全生成异常,并且没有调用控制器 – Reddy

+1

不,你必须单击首选项,以及什么异常它的生成 –

1

试试这个

portlet.xml 

<supports> 
..... 
<portlet-mode>edit</portlet-mode> 
</supports> 

控制器类

@Controller 
@RequestMapping(value = "EDIT") 
public class XYZ{ 
} 

HTH

0

首先,“配置”不是“编辑”模式。如果您启用编辑模式(如其他人所建议的那样),您将在您的portlet菜单中获得“首选项”按钮。这是一项Liferay功能,您可以根据您的要求进行覆盖。

我自己没有尝试过这个,但是你可以尝试使用@Autowired来AutoWire你的MyConfigurationAction类(如果需要的话可以使用@Required注解?)。如果尚未完成,请不要忘记将<context:annotation-config/>放入applicationContext.xml文件中。

+1

第一件事情是配置类[bean]不是由Spring创建的,因此Spring不能注入任何依赖关系,即使你用任何注释标记,并把额外的条件 – Reddy

+0

我想你自己回答它。如果我能找到一种方法来实现这一点,我也检查了Liferay源码,但是该类由EditConfigurationAction类实例化。所以它不会以这种方式工作。 –