2012-03-12 2 views
1

Я пытаюсь написать небольшой фрагмент кода, который будет отображаться в портлете для Liferay, имя пользователя, зарегистрированного.Как написать портлет без какого-либо компонента внешнего вида

Моя проблема, являющаяся частью проблемы программирования, заключается в том, что я не понимаю, как именно соединение между классом java и файлом view.jsp.

Я знаю, и я могу показать имя пользователя и фотографию только с файлом view.jsp, но я не могу достичь использования также класса Java.

Я пробовал его с помощью метода processAction() и метода doView(). Я предполагаю, что нам нужно сохранить параметры, чтобы показать информацию в actionResponse, чтобы отобразить ее в портлете, но я на самом деле немного потерян и запутан. Одним из моих вопросов, например, является: Должен ли я писать также в файле view.jsp? Или я могу делать все только с моим классом java? Я присоединяю код моего класса java.

Любая помощь будет очень полезной. Большое спасибо заранее. Рафа

public class UserInfo extends MVCPortlet{ 

@Override 
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) 
     throws IOException, PortletException 
     {    
      ThemeDisplay themeDisplay = (ThemeDisplay) 
        actionRequest.getAttribute(WebKeys.THEME_DISPLAY); 
      User user = themeDisplay.getUser(); 

      PortletPreferences prefs = actionRequest.getPreferences(); 
      String userName = (String) actionRequest.getParameter("UserInfo"); 
      userName = user.getFullName(); 

      if (userName != null) 
      { 
       prefs.setValue("UserInfo", userName); 
       prefs.store(); 
      } 

      actionResponse.setRenderParameter("userName", userName); 
      super.processAction(actionRequest, actionResponse); 
    } 
} 

ответ

0

Поскольку в жизненном цикле портлета, процесс визуализации следует процесс действий по resourceRequest за исключением, метод doView будет вызываться после обработки завершения действия , Даже если вы можете выводить html-материалы оттуда, это не очень хорошая идея. Класс портлета лучше обрабатывается как контроллер, который отправляет запросы на визуализацию другим jsps. Таким образом, вы не будете раздувать свой класс портлетов и не будете легко поддерживать ваши коды.

Это может быть несколько способов. Если информация, которую вы хотите передать, является строкой, вы можете использовать ActionResponse для установки параметров рендеринга - ActionResponse.setRenderParameter(name, value), последний из которых будет получен RenderRequest. Если есть объекты для передачи, и ваш портлет-сервер поддерживает спецификации портлета 2.0, вы можете установить атрибут ActionRequest и прочитать его из кодов вашего вида - вам нужно установить для actionScopedRequestAttributes значение true, как это, в файле portlet.xml.

<container-runtime-option> 
    <name>javax.portlet.actionScopedRequestAttributes</name> 
    <value>true</value> 
<container-runtime-option> 

В стороне метод doView, звоните:

getPortletContext().getRequestDispatcher(jspPage).include(request, response); 

разослать вынести запрос на страницу JSP вы хотите.

1

Имейте в виду, что вы не можете писать в выходной поток из processAction() - она ​​должна быть рендер фаза портлета.

Что касается места, где вы создаете фактический вывод HTML: я настоятельно рекомендую что-либо «выше уровня сервлета» - например, jsp, jsf или любой другой технологии, даже в самых простых случаях. В MVC Portlet от Liferay есть некоторые хорошие значения по умолчанию, которые вам просто нужно использовать и перейти на view.jsp.

outputStream.write ("my html code"); не поддерживается для чего-либо выше этого уровня сложности - теперь вы лучше выбираете технологию просмотра. Это может помочь рассматривать портлет как контроллер, который нуждается в представлении и работает с моделью.

Edit (после Вашего комментария):

public void doView(
     RenderRequest renderRequest, RenderResponse renderResponse) 
    throws IOException, PortletException { 
    // Note: This is not HTML-escaped. Just for demo. Don't try this at home 
    renderResponse.getWriter().write("The username is " + 
      renderRequest.getParameter("userName")); 
} 
+0

Я знаю, что вы имеете в виду. Я изучаю портлеты, мне всего 3 дня. Я выполнил свою задачу с view.jsp только с некоторыми строками, как вам было рекомендовано, но теперь я хотел бы добиться этого и с помощью класса java, поэтому я спросил об этом. – agapitocandemor

+0

ok, см. Мое редактирование –

+0

Я, наконец, сделал это: PrintWriter writer = response.getWriter(); \t \t \t \t writer.write (String.Format ("

% s

", userinfo2)); (

% s

", наименование)); \t \t writer.close(); Но теперь я попробую, спасибо;) – agapitocandemor

Смежные вопросы