Разработка действий завершается унаследованием класса ActionSupport. Класс Actionsupport не только просто реализует интерфейс действия, но также добавляет поддержку проверки и локализации. Пользовательские действия в реальной разработке должны наследовать этот класс. Добавить функцию проверки формы к входу в систему пользователя
Роль класса ActionSupport:
Struts2 не требует класса действий, которые мы разработали, чтобы унаследовать каких -либо базовых классов или интерфейса стойки на стойки или для облегчения реализации наших собственных действий, мы унаследоваем класс com.opensymphony.xwork2.carestport в большинстве случаев и переопределим метод авторитетного execute () в этом классе. Поскольку в этом классе существует много практических оправданий, предоставляется много методов по умолчанию, включая международные методы информации, методы по умолчанию для обработки запросов пользователей и т. Д., Которые могут значительно упростить разработку ACION. В Struts2 действие обычно используется непосредственно для инкапсуляции параметров HTTP -запроса. Следовательно, класс действия также должен включать атрибуты, соответствующие параметрам запроса, и предоставлять соответствующие методы Getter и Setter для атрибутов.
Так в чем же разница между интерфейсом действия и классом ActionSupport?
Интерфейс действия имеет:
Public Static Final String Success = "Success"; Public Static Final String none = "none"; public Static Final String error = "error"; public static final Login = "login"; public String execute () throws Exception;
Вы можете видеть, что существует пять статических констант и выполнять () с помощью строки возвращаемого типа
На основе реализации интерфейса действия, класс инструментов ActionSupport также определяет метод Validate (). Если метод переопределен, он будет выполнен до метода execute (). Если проверка не удастся, она будет передана на вход. Атрибут ввода должен быть настроен при настройке действия.
Кроме того, ActionSupport также предоставляет метод GetText (String Key) и реализует интернационализацию, которая получает информацию о интернационализации из файлов ресурсов.
Таким образом, при настройке тега вы можете определить переменную как новый объект ActionSupport для достижения интернационализации.
У класса ActionSupport есть (исходный код):
открытый класс Actionsupport реализует действие, проверенное, валидацию, TextProvider, LocalEprovider, Serializable {Protected Static Logger log = loggerFactory.getLogger (actionSupport.class); private final ValidationAwaresupport valyationAware = new ValidationAwarePport () setActionErrors (collection <string> errormessages) {valyationAware.setActionErrors (errorMessages);} public Collection <String> getActionErrors () {return valyationAware.getActionErrors ();} public void setActionMessage (collection <string> wardationAware.setActionMessages (сообщения); ValidationAware.getActionMessage ();}@rececatedPublic Collection <String> getErrorMessage () {return getActionErrors ();}@rececatedPublic Map <String, list <string >> getErrors () {return getFielderrors ();} public void setFielderrors (map <string >> errorrormap (); {valyationAware.setFielderRors (errorMAP);} public Map <string, list <string >> getFielderRors () {return valyationAware.getFielderRors ();} public locale getLocale () {actionContext ctx = actionContext.getContext (); if (ctx! (Log.isdebugenabled ()) {log.debug ("Контекст действия не инициализирован");} return null;}} public boolean haskey (string key) {return getTextProvider (). Haskey (key);} public String getText (String atextName) {return getTextPread (). DefaultValue) {return getTextProvider (). getText (atextName, defaultValue);} public String getText (String atextName, String defflieValue, String obj) {return getTextProvider (). getText (atextName, defaultValue, obj);} public getText (string atextNam getTextProvider (). getText (atextName, args);} public String getText (string key, string [] args) {return getTextProvider (). getText (key, args);} public String getText (string atextName, string defaultVal String getText(String key, String defaultValue, String[] args) {return getTextProvider().getText(key, defaultValue, args);}public String getText(String key, String defaultValue, List<?> args, ValueStack stack) {return getTextProvider().getText(key, defaultValue, args, stack);}public String getText(String key, String defaultValue, string [] args, valueStack Stack) {return getTextProvider (). getText (key, defaultValue, args, stach);} public String getFormatted (String Key, String expr) {map <string> conversionerrors = actionContext.getContext (). (String []) conversionErrors.get (expr); return vals [0];} else {final valueStack valuEStack = actionContext.getContext (). GetValuEStack (); final Object val = valuestack.findValue (expr); return getText (key, arrays.asslist (val); getTextProvider (). getTexts ();} public resourcebundle getTexts (String abundLename) {return getTextProvider (). getTexts (Abundlename);} public void AddactionErr (String anerrramessage) {validationAware.addactionError (anerrormessage);} publicAge addActionSAGE (aMessArage) (aMessArage) (aMessArage); {valyationAware.addactionMessage (amessage);} public void AddFielderRor (String FieldName, String errormessage) {valistanationAware.addfielderror (FieldName, ErrorMessAge);} public String Input () Throws Exception {return Input;} public String dodefult () excurs exception thress exception () exectut () exection exectut () exection exectut () exectut () exection exectut (). Успех;} public boolean hAsactionErrors () {return valyationAware.hasactionErrors ();} public boolean hasactionmessage () {return valyationAware.hasactionMessages ();} public boolean haserrors () {retural valyationaware.haserrors ();} public boole ValidationAware.hasfielderrors ();} public void clearfielderrors () {valyationAware.clearfielderrors ();} public void ulearctionErrors () {valyationAware.clearActionErrors ();} public void clearMessages () {valytionAware.clearMessage (); {valyationAware.clearErrors ();} public void clearErrorsAndmessage () {valyationAware.clearerRorsAndmessage ();} public void valiade () {} @OverridePublic Object Clone () Throws ClonenotSupportExex {return Super.clone (); getTextProvider () {if (textProvider == null) {TextProviderFactory tpf = new TextProviderFactory (); if (container! = null) {container.inject (tpf);} textprovider = tpf.createinstance (getClass () this); контейнер) {this.container = container;} Вы можете видеть, что в нем много методов, но мы, очевидно, видим, что есть метод, который мы очень хорошо знаем, Validate () и проверка данных. С помощью этого метода мы можем запрашивать при входе в систему, имя пользователя и пароль пусты или другие ...
Теперь приведите простой пример: когда имя пользователя и пароль пусты, дайте клиенту дружеское подсказку.
Ниже приведены два способа объяснить функцию проверки данных стопор 2.
1. Проверка метода кодирования
1) Действие должно быть унаследовано от действий
2) Напишите общедоступный метод void validexxx () для проверки метода обработки запросов, и выполните проверку данных формы внутри метода.
3) Вы также можете написать метод public void validate () для всех методов обработки запросов.
4) В методе проверки вы можете добавить сообщение об ошибке проверки поля через метод AddFielderRor ().
5) Когда проверка сбой, структура стойки автоматически перепрыгнет на страницу результата с вводом имени. На странице сбоя проверки вы можете использовать <s: Fielderror/> для отображения сообщений об ошибках
6) Простые и гибкие. Но это не очень используется
Переписать метод проверки
1. Действие, которое мы написали, обычно наследуют и действий, и действие, и действия не только реализуют интерфейс действия, но также реализует валидный интерфейс, предоставляя функцию проверки данных. Определите метод проверки в Validatable Interface, переопределите метод, если в поле ввода в вводе проверки ошибка, добавьте ошибку в поле Fielderror класса ActionSupport, а затем выведите его через выражение ognl.
Ниже приведено интерфейс проверки входа в систему:
<body> <%-Информация о проверке выхода-%> <%-если вы хотите единую подсказку <S: Fielderror FieldName = "Uname"/>-%> <%-<S: Property Value = "/>-%> <div Style =" Color: Red "> <S: Fielderror/> </div> <s: form =" form1 "name". action = "LoginValidateAction"> <S: Div> Пожалуйста, введите имя пользователя: <S: TextField name = "user.Uname"> </s: TextField> </s: div> <S: Div> Пожалуйста, введите пароль: <S: имя пароля = "user.upwd">/s: пароль> </s: div> <s. degin = "> </s: form> </% -%> <S: Debug> </s: Debug> </body>
После того, как пользователь вводит данные, отправьте его в LoginValidateAction:
открытый класс loginValidateAction Extends Actionsupport реализует Action {public User; Public Map <String, Object> Map; // Метод проверки будет работать на всех действиях @Override public void validate () {if (user.getuname (). Length () == 0) {addFielderror («uname», «Имя пользователя не может быть пустым!» if (user.getupwd (). length () == 0) {addfielderror ("upwd", "Пароль не может быть пустым!");}} // Методы обработки бизнеса Public String execute () исключает исключение {System.out.println(user.getUname());if(user.getUname().equals("admin")&&user.getUpwd().equals("admin")){//Let Struts2 inject map collection map.put("uname", user.getUname());//If the login is successful, return "success" return SUCCESS;}else{//Login failed, return ErrortReturn Input; // это должно быть входным}}/*** @return Пользователь*/public user getUser () {return user;}/*** @param Пользователь пользователь для установки*/public void setuser (пользователь пользователя) {this.user = user;} Приведенный выше класс LogInValidateAction переопределяет метод проверки, который будет выполнен до выполнения метода излишки. Если после выполнения метода, FileDerror класса действия содержит ошибку проверки данных, запрос будет пересылка для входного логического представления.
Struts.xml настроен следующим образом:
<!-Проверка данных-> <name = "loginvalidateaction"> <!-Когда результат-«успех», перейдите на страницу успеха.jsp-> <result name = "Успех"> Успех. JSP </result> <!-Когда результат "ошибка", прыгните на страницу fail.jsp или все еще login.jsp-> <result name = "result name =" result name = "result name =" result name = " name = "login"> fail.jsp </result> <result name = "error"> fail.jsp </result> </action>
Влияние на клиента:
Но вы заметили, что когда ошибка вызвана, это не тот эффект, который мы хотим.
Это не то, что мы хотим, так как же мы можем его изменить? На самом деле, это в основном показывает стиль темы Struts2,
Давайте снова посмотрим:
Это автоматически добавляет к нам стили. Struts2 предоставляет три темы, Ajax, Simple, xhtml. По умолчанию по умолчанию на тему XHTML. Конечно, вы можете написать любую из своих собственных тем, которые мы называем пользовательскими темами. Вышеуказанные проблемы могут быть решены путем их установки
Есть два способа решить это:
1. Простой метод (также практичный, для всех тегов Struts2) добавьте следующую строку кода в struts.xml.
<constant name = "struts.ui.theme" value = "simple" />
Это означает, что все страницы используют простую тему. В настоящее время страница, которую она выводит, не добавляет никакого ненужного кода, такого как таблица TR TD и т. Д., И мы можем редактировать стиль страницы, как и другие страницы редактирования.
Давайте посмотрим на формат приглашения ошибки
Мы можем установить такую тег:
<S: Свойство значение = "Ошибки. Uname [0]"/>
Прокомментируйте этот тег:
<div style = "color: red"> <s: Fielderror/> </div>
Но когда мы установим это так, этот эффект произойдет.
Этот эффект немного похож на подсказку, когда мы обычно вводим ошибки, и есть и другие значения атрибутов, поэтому нам не нужно перечислять их один за другим.
Структура проверки со struts2
Проверка конфигурации XML.
Выполняет перед кодированием.
1) Для проверки класса действий напишите файл правила проверки: Именованный файл: validation.xml в классе действий.
2) Добавьте правила проверки в файл правила проверки: для конкретных имен устройств проверки см. Ссылку на Struts2 или API Struts2.
A) Проверка поля: Правила проверки каждого поля типа без качества в классе действий.
<Field name = "Имя поля, которое должно быть проверено"> <Field-Validator Type = "Проверьте имя линейки" Short-Circuit = "Будь то проверка короткого пути (по умолчанию false)"> <param name = "Имя параметра, чтобы использоваться Verifier"> value </param> <Сообщение> Заглавное сообщение, когда версирование не выполняет </message> </field-validator> </!-Вы также можете добавить и другое.
б) Проверка без поля: используйте экспрессию ognl для комбинаторной проверки для определенных полей в классе действия.
<validator type = "fieldexpression"> <param name = "fieldname"> pwd </param> <param name = "fieldname"> pwd2 </param> <param name = "Expression"> <! [cdata [pwd == pwd2]]> </param> <!-ognl Expression-> <plassive> подтверждает, что входные данные и пароль infoncestent </param> <!-ognl-> <plase>.
C) Проверка посетителей: в основном используется для проверки поля пользовательского типа в классе действий. (Для использования режима, управляемого моделью)
i) Используйте правила проверки посетителей для поля пользовательского типа в файле правил проверки класса действий.
<!-Используйте проверку посетителя для пользовательского поля-> <field name = "user"> <Field-validator type = "обязательно" короткий циркут = "true"> <Сообщение> требуется информация USSAGE </message> <!-Prefix сообщения-> </field-validator> <Field-validator Type = "Visitor"> <!-Укажите как правило посетителя-Paramifify Paramififify Paramififify US> «Парамец»> «Парамец» <//ramemon <//recelecte1 <//ramemon <//paramyfist </paramyfife <//ramemon <//ramemon. Имя контекста для этой проверки посетителя-> <param name = "appendprefix"> true </param> <!-Добавить ли префикс сообщения об отказе проверки-> <Сообщение> USSAGE </message> <!-Prefix сообщения-> </field-Validator> </field>
ii) Напишите файл правила проверки для поля посетителя. Имя файла: Имя типа поля посетителя [-visitor Verification Context name] -validation.xml. Например: имя файла в этом примере-пользователь-Usercontext-validation.xml
Примечание. Этот файл должен храниться в пакете, где расположен тип поля посетителя.
iii) Добавить правила проверки для поля для проверки в файле правила проверки поля посетителя.
Мы также можем выполнить проверку данных, добавив файл конфигурации проверки без перезаписывания метода проверки. Этот файл конфигурации проверки завершает проверку поля формы, используя существующее устройство проверки в Struts2. Здесь возьмите необходимое устройство проверки в качестве примера. Это устройство проверки представляет собой необходимое устройство для проверки, которое указывает, что необходимо ввести определенное поле формы.
Ниже приведен метод написания логинвалидатеатации validation.xml этого файла конфигурации проверки:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Validators public "-// apache struts // xwork validator 1.0.2 // en" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> validators> validator validator-1.0.2.dtd"> validators> nameidator". type = "requiredString"> <seslect> Имя пользователя не может быть пустым </message> </field-validator> </field> <field name = "upwd"> <field-validator type = "requireString"> <Сообщение> отрывок не может быть пустым </message> </field-validator> <Field-Validator Type = "StringLength"> <paramlede = "maxlday"> </param> </paramfide "> </param> </paramfide"> </param> </paramfide " name = "minlength"> 6 </param> <Сообщение> Длина прохода должна быть между $ {minlength}-$ {maxlength} bits </message> </field-validator> </field> </validators> Примечание. Этот файл конфигурации проверки должен соответствовать следующим двум правилам:
1. Формат судьбы файла должен быть имя класса действий -validation.xml. Например, в этом примере имя файла: LoginValidateAction-validation.xml
2. Файл должен быть в том же пути, что и файл класса класса действий. В этом примере файл находится в
Код класса LoginValidateAction все же:
открытый класс loginValidateAction Extends Actionsupport реализует Action {public User; Public Map <String, Object> Map; // Метод проверки будет работать на всех действиях @Override public void validate () {if (user.getuname (). Length () == 0) {addFielderror («uname», «Имя пользователя не может быть пустым!» if (user.getupwd (). length () == 0) {addfielderror ("upwd", "Пароль не может быть пустым!");}} // Методы обработки бизнеса Public String execute () исключает исключение {System.out.println (user.getuname ()); if (user.getuname (). Equals ("admin") && user.getupwd (). Equals ("admin")) {// Let Struts2 инъекционных карт карты карты. Cut ("uname", user.getuname (); // если логин успешно возвращает "return", return ate at etresemin; ErrortReturn Input; // это должно быть входным}}/*** @return Пользователь*/public user getUser () {return user;}/*** @param Пользователь пользователь для установки*/public void setuser (пользователь пользователя) {this.user = user;}Выше приведено функция проверки данных Struts 2 и решение проблемы проверки, введенной редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!