Struts 2 - Результаты и типы результатов

Как упоминалось ранее, <results> тег играет роль viewв структуре Struts2 MVC. Действие отвечает за выполнение бизнес-логики. Следующим шагом после выполнения бизнес-логики является отображение представления с помощью<results> тег.

Часто к результатам прилагаются некоторые правила навигации. Например, если метод действия заключается в аутентификации пользователя, есть три возможных результата.

  • Успешный вход в систему
  • Неудачный вход - неверное имя пользователя или пароль
  • Аккаунт заблокирован

В этом сценарии метод действия будет настроен с тремя возможными строками результата и тремя различными представлениями для визуализации результата. Мы уже видели это в предыдущих примерах.

Но Struts2 не связывает вас с использованием JSP в качестве технологии просмотра. В конце концов, вся цель парадигмы MVC состоит в том, чтобы разделять уровни и настраивать их. Например, для клиента Web2.0 вы можете захотеть вернуть XML или JSON в качестве вывода. В этом случае вы можете создать новый тип результата для XML или JSON и добиться этого.

Struts поставляется с несколькими предопределенными result types и все, что мы уже видели, это тип результата по умолчанию dispatcher, который используется для отправки на страницы JSP. Struts позволяет использовать другие языки разметки для технологии просмотра, чтобы представить результаты, и популярные варианты включаютVelocity, Freemaker, XSLT и Tiles.

Тип результата диспетчера

В dispatcherТип результата является типом по умолчанию и используется, если не указан другой тип результата. Он используется для перенаправления на сервлет, JSP, HTML-страницу и т. Д. На сервере. Он использует метод RequestDispatcher.forward () .

Мы видели «сокращенную» версию в наших предыдущих примерах, где мы указывали путь JSP в качестве тела тега результата.

<result name = "success">
   /HelloWorld.jsp
</result>

Мы также можем указать файл JSP с помощью тега <param name = "location"> в элементе <result ...> следующим образом:

<result name = "success" type = "dispatcher">
   <param name = "location">
      /HelloWorld.jsp
   </param >
</result>

Мы также можем поставить parseпараметр, который по умолчанию равен true. Параметр parse определяет, будет ли параметр местоположения анализироваться на наличие выражений OGNL.

Тип результата FreeMaker

В этом примере мы увидим, как мы можем использовать FreeMakerкак технология просмотра. Freemaker - популярный механизм создания шаблонов, который используется для создания вывода с использованием предопределенных шаблонов. Давайте теперь создадим файл шаблона Freemaker с именемhello.fm со следующим содержанием -

Hello World ${name}

Приведенный выше файл представляет собой шаблон, в котором name- это параметр, который будет передан извне с использованием определенного действия. Вы сохраните этот файл в своем КЛАССЕ.

Далее, давайте изменим struts.xml чтобы указать результат следующим образом -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success" type = "freemarker">
            <param name = "location">/hello.fm</param>
         </result>
      </action>
      
   </package>

</struts>

Давайте сохраним наши файлы HelloWorldAction.java, HelloWorldAction.jsp и index.jsp в том виде, в каком мы создали их в главе с примерами.

Теперь щелкните правой кнопкой мыши имя проекта и щелкните Export > WAR File для создания файла War.

Затем разверните эту WAR в каталоге веб-приложений Tomcat. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресуhttp://localhost:8080/HelloWorldStruts2/index.jsp. Это приведет к появлению следующего экрана.

Введите значение «Struts2» и отправьте страницу. Вы должны увидеть следующую страницу.

Как видите, это точно так же, как представление JSP, за исключением того, что мы не привязаны к использованию JSP в качестве технологии представления. В этом примере мы использовали Freemaker.

Тип результата перенаправления

В redirectТип результата вызывает стандартный метод response.sendRedirect () , в результате чего браузер создает новый запрос в указанное место.

Мы можем указать местоположение либо в теле элемента <result ...>, либо в виде элемента <param name = "location">. Redirect также поддерживаетparseпараметр. Вот пример, настроенный с использованием XML -

<action name = "hello" 
   class = "com.tutorialspoint.struts2.HelloWorldAction"
   method = "execute">
   <result name = "success" type = "redirect">
      <param name = "location">
         /NewWorld.jsp
      </param >
   </result>
</action>

Поэтому просто измените свой файл struts.xml, чтобы определить тип перенаправления, как указано выше, и создайте новый файл NewWorld.jpg, куда вы будете перенаправлены всякий раз, когда действие hello вернет успех. Вы можете проверить пример Struts 2 Redirect Action для лучшего понимания.