Класс действий конфигурации Liferay — внедрение зависимостей Spring

В Liferay класс действия конфигурации определен в файле liferay-portlet.xml. Проблема в том, что если я использую любую инъекцию зависимостей Spring, она не работает.

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

Реализация класса действий

public class MyConfigurationAction extends DefaultConfigurationAction {

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

Как внедрить эти свойства в этот класс Action без использования ClassPathXmlApplicationContext и жесткого кодирования файла spring.xml в классе


person Reddy    schedule 28.01.2014    source источник


Ответы (3)


Есть два способа сохранить настройки при разработке портлета [в liferay],

  1. Через специальный способ liferay, который использует запись liferay-portlet.xml. не может управляться с пружиной.

  2. JSR-286 [независимый от портала], режим EDIT портлета.

При разработке портлета с использованием среды Spring MVC рекомендуется использовать режим редактирования портлета.

В среде портлетов Spring MVC вы можете сопоставлять запросы портлетов по режимам портлета.

Например: создайте класс контроллера, как показано ниже, который будет сопоставляться с запросами режима EDIT.

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

с двумя методами, один метод с аннотацией @RenderMapping, отвечающий за представление, и другой метод с аннотацией @ActionMapping/@RequestMapping, отвечающий за сохранение настроек.

Надеюсь, это поможет.

person Pankaj Kathiriya    schedule 28.01.2014
comment
Я включил режим EDIT в portlet.xml и сделал, как вы сказали. Но этот класс вообще не вызывается. Запрос всегда отправляется в режиме VIEW только тогда, когда я нажимаю «Конфигурация». Если я нажму «Настройки», он вообще генерирует исключение и не вызывает контроллер - person Reddy; 28.01.2014
comment
Нет, вам нужно нажать «Настройки» и указать, какое исключение оно генерирует. - person Pankaj Kathiriya; 28.01.2014

Попробуй это

portlet.xml

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

Класс контроллера

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

ХТН

person Laxman Rana    schedule 28.01.2014

Прежде всего, «Конфигурация» НЕ является режимом «Редактировать». Если вы включите режим редактирования (как было предложено другими), вы получите кнопку «Настройки» в меню вашего портлета. Это функция Liferay, которую вы можете переопределить в соответствии с вашими требованиями.

Я не пробовал это сам, но вы можете попробовать использовать @Autowired для AutoWire вашего класса MyConfigurationAction (и, возможно, использовать аннотацию @Required, если это необходимо?). Не забудьте поместить <context:annotation-config/> в файл applicationContext.xml, если это еще не сделано.

person Rushikesh Thakkar    schedule 30.01.2014
comment
во-первых, класс Configuration [bean] не создается Spring, поэтому Spring никогда не сможет внедрить какие-либо зависимости, даже если вы пометите какой-либо аннотацией и поставите дополнительные условия - person Reddy; 30.01.2014
comment
Я думаю, вы ответили на него для себя. Я также проверил в исходном коде Liferay, могу ли я найти способ добиться этого, но экземпляр класса создается классом EditConfigurationAction. Так что это не будет работать таким образом. - person Rushikesh Thakkar; 31.01.2014