Это достаточно обширный вопрос, на который трудно ответить в полном смысле этого слова.Тем не менее, есть некоторые правила, которые почти всегда соблюдаются:
Если ваш портлет использует какую-то инфраструктуру Java (например, Struts 2, JSF), он почти наверняка будет использовать предопределенный javax.portlet.GenericPortlet
подкласс.Вся обработка выполняется платформой, и класс портлета имеет единственную цель - перенаправить запросы в платформу.Этот вид класса портлета называется bridge .В вашем примере ваш мост имеет вид org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
.
Если ваш портлет использует портлет Liferay MVC и показывает только полученные данные в JSP (без их обновления), то вам может не потребоватьсянаписать свой собственный класс портлета.Вам может не понадобиться другой класс, потому что класс com.liferay.util.bridges.mvc .MVCPortlet
автоматически представляет JSP.Я не буду объяснять это подробно, но в этом суть.Это редкая ситуация, поэтому не думайте об этом.
Если ваш портлет не использует Liferay MVC, но вместо этого написан на простом JSR 286 API,тогда вам, вероятно, нужно написать свой собственный класс портлета.Это связано с тем, что для представления JSP недостаточно стандартных render()
, doView()
и т. Д. Методов GenericPortlet
.
Если ваш портлет не использует универсальную инфраструктуру Java, используетLiferay MVC и обрабатывает данные, обновляя их, тогда вам, вероятно, понадобится некоторый пользовательский подкласс MVCPortlet
.Это так, потому что обработка данных производится методами, вызываемыми на этапе действия.Эти методы (обычно называемые «методами действия процесса») распознаются по двум параметрам: javax.portlet .ActionRequest
и javax.portlet .ActionResponse
.
В вашем примере у вас есть два портлета: один, который использует Struts (таким образом, класс портлета просто отправляет запросы в Struts 2), и другой, который использует собственный класс портлета.Этот класс портлета может расширять GenericPortlet
или MVCPortlet
.Если он использует GenericPortlet
, то неизбежно иметь пользовательский класс.Если он использует MVCPortlet
, то у этого класса, вероятно, есть некоторые методы действий процесса.
Могу поспорить, мой ответ слишком абстрактен, но я надеюсь, что он даст вам некоторые идеи по другим вопросам, более конкретным и отвечающим.