URL-адрес действия не вызывает правильный метод действия в liferay6.1?

Я разработал портлет liferay6.1 с spring mvc, где у меня есть два drop down (первый вариант и второй вариант), text box (введите имя) и сохранение button.

У меня есть два запроса ajax, соответствующие каждому drop down. Скажем, например, для второго раскрывающегося списка у меня есть метод javascript, в котором я создаю URL-адрес действия с параметром action со значением в нем, как показано ниже.

<portlet:actionURL portletMode='view'><portlet:param name='action' value='dropDownSelect'/></portlet:actionURL> . 

Точно так же у меня есть метод javascript для других drop down, где я также предоставляю URL-адрес действия, например

<portlet:actionURL portletMode='view'><portlet:param name='action' value='addAnotherOption'/></portlet:actionURL>. 

Когда я нажимаю кнопку «Сохранить», я отправляю форму, в которой я создал URL-адрес без параметра действия. подобно

<portlet:actionURL portletMode='view'></portlet:actionURL>. 

Итак, для каждого действия у меня есть другой метод в моем controller.java, который будет получать этот запрос действия. Для двух методов действия у меня есть аннотация типа

  @RequestMapping(params = "action=dropDownSelect") 

поверх метода. Только для одного метода действия я просто дал аннотацию, подобную этой

 @RequestMapping("VIEW")

Моя проблема часто заключается в том, что запрос действия с параметром не получает правильный метод, вместо этого он переходит к методу, который имеет аннотацию как @RequestMapping("VIEW").

Я использовал тот же код в liferay6.0, где я не сталкивался с подобными проблемами, но в Liferay 6.1 я часто сталкиваюсь с этой проблемой. Может ли кто-нибудь помочь мне с проблемой?


person user2574980    schedule 08.01.2014    source источник
comment
вы должны использовать @ResourceMapping и ‹portlet:resourceURL› для вещей ajax.   -  person Pankaj Kathiriya    schedule 08.01.2014
comment
Спасибо за ответ. На самом деле мы перенесли наше приложение с более чем 70 портлетами с liferay 6.0 на liferay 6.1. Будет сложно изменить каждый метод в этих портлетах. Нет ли другого подхода или какой-либо причины, по которой происходит такое поведение?   -  person user2574980    schedule 08.01.2014


Ответы (1)


Эта проблема возникла из-за того, что для каждого URL-адреса действия, который я создаю в javascript, есть portletmode="view". Из-за чего Spring периодически не выполняет поиск, чтобы проверить, существует ли какой-либо параметр действия или нет, он по умолчанию вызывает метод действия, который имеет @RequestMapping("VIEW"). Чтобы решить эту проблему, я изменил свою аннотацию следующим образом:

@RequestMapping("VIEW") @ActionMapping(params = "action=dropDownSelect") для всех методов, значения параметров которых должны быть указаны в аннотации. Так что при переходе от javascript к контроллеру Spring также будет проверять portletmode= view, а также параметр действия.

person user2574980    schedule 13.01.2014