Все в HTTP-запросе рассматривается протоколом как строка . Это включает в себя числа, логические, целые числа, даты, десятичные дроби и все остальное. Однако в классе Struts вы можете иметь свойства любых типов данных.
Как Struts автоматически связывает свойства для вас?
Struts использует различные преобразователи типов под крышками для выполнения тяжелых работ.
Например, если у вас есть целочисленный атрибут в вашем классе Action, Struts автоматически преобразует параметр запроса в целочисленный атрибут, и вы ничего не делаете. По умолчанию Struts поставляется с несколькими конвертерами типов
Если вы используете какой-либо из перечисленных ниже преобразователей, вам не о чем беспокоиться —
- Целое число, число с плавающей запятой, двойное число, десятичное число
- Дата и дата и время
- Массивы и Коллекции
- Перечисления
- логический
- BigDecimal
Иногда, когда вы используете свой собственный тип данных, необходимо добавить свои собственные конвертеры, чтобы Struts знал, как конвертировать эти значения перед отображением. Рассмотрим следующий класс POJO Environment.java .
package com.tutorialspoint.struts2; public class Environment { private String name; public Environment(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Это очень простой класс с атрибутом name , поэтому в этом классе нет ничего особенного. Давайте создадим еще один класс, который содержит информацию о системе — SystemDetails.java .
Для целей этого упражнения я жестко закодировал среду «Разработка», а операционную систему — «Windows XP SP3».
В проекте реального времени вы получите эту информацию из конфигурации системы.
Давайте иметь следующий класс действий —
package com.tutorialspoint.struts2; import com.opensymphony.xwork2.ActionSupport; public class SystemDetails extends ActionSupport { private Environment environment = new Environment("Development"); private String operatingSystem = "Windows XP SP3"; public String execute() { return SUCCESS; } public Environment getEnvironment() { return environment; } public void setEnvironment(Environment environment) { this.environment = environment; } public String getOperatingSystem() { return operatingSystem; } public void setOperatingSystem(String operatingSystem) { this.operatingSystem = operatingSystem; } }
Далее, давайте создадим простой файл JSP System.jsp для отображения информации о среде и операционной системе.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1" pageEncoding = "ISO-8859-1"%> <%@ taglib prefix = "s" uri = "/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>System Details</title> </head> <body> Environment: <s:property value = "environment"/><br/> Operating System:<s:property value = "operatingSystem"/> </body> </html>
Давайте свяжем вместе system.jsp и класс SystemDetails.java, используя struts.xml .
Класс SystemDetails имеет простой метод execute (), который возвращает строку « SUCCESS ».
<?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 = "system" class = "com.tutorialspoint.struts2.SystemDetails" method = "execute"> <result name = "success">/System.jsp</result> </action> </package> </struts>
-
Щелкните правой кнопкой мыши имя проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War».
-
Затем разверните эту WAR в каталоге веб-приложений Tomcat.
-
Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / system.action . Это создаст следующий экран —
Щелкните правой кнопкой мыши имя проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War».
Затем разверните эту WAR в каталоге веб-приложений Tomcat.
Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / system.action . Это создаст следующий экран —
Что не так с приведенным выше выводом? Struts знает, как отобразить и преобразовать строку «Windows XP SP3» и другие встроенные типы данных, но он не знает, что делать со свойством типа Environment . Он просто вызывается методом toString () в классе
Чтобы решить эту проблему, давайте теперь создадим и зарегистрируем простой TypeConverter для класса Environment.
Создайте класс с именем EnvironmentConverter.java со следующим.
package com.tutorialspoint.struts2; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class EnvironmentConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] values, Class clazz) { Environment env = new Environment(values[0]); return env; } @Override public String convertToString(Map context, Object value) { Environment env = (Environment) value; return env == null ? null : env.getName(); } }
EnvironmentConverter расширяет класс StrutsTypeConverter и сообщает Struts, как преобразовать Environment в String, и наоборот, переопределив два метода convertFromString () и convertToString () .
Давайте теперь зарегистрируем этот конвертер, прежде чем использовать его в нашем приложении. Есть два способа зарегистрировать конвертер.
Если конвертер будет использоваться только в определенном действии, вам нужно будет создать файл свойств, который должен быть назван ‘[action-class]’ spoktion.properties .
В нашем случае мы создаем файл с именем SystemDetails-converstion.properties со следующей регистрационной записью —
environment = com.tutorialspoint.struts2.EnvironmentConverter
В приведенном выше примере «environment» — это имя свойства в классе SystemDetails.java, и мы говорим Struts использовать EnvironmentConverter для преобразования в это свойство и из него.
Однако мы не собираемся этого делать, вместо этого мы собираемся зарегистрировать этот конвертер глобально, чтобы его можно было использовать во всем приложении. Для этого создайте файл свойств с именем xwork-conversion.properties в папке WEBINF / classes со следующей строкой
com.tutorialspoint.struts2.Environment = \ com.tutorialspoint.struts2.EnvironmentConverter
Это просто регистрирует конвертер глобально, так что Struts может автоматически выполнять конвертацию каждый раз, когда сталкивается с объектом типа Environment. Теперь, если вы перекомпилируете и перезапустите программу, вы получите лучший результат следующим образом:
Очевидно, что теперь результат будет лучше, что означает, что наш конвертер Struts работает нормально.
Таким образом, вы можете создать несколько конвертеров и зарегистрировать их для использования в соответствии с вашими требованиями.