Работа с действиями Struts 2
В Struts 2 вы будете проводить большую часть времени, работая с действиями. Класс действия содержит бизнес-логику, извлекает пакет ресурсов, хранит данные, проверяет и выбирает страницу результатов просмотра, которую следует отправить обратно пользователю. Это сердце Struts 2, поэтому вы должны понимать основную концепцию действий.
1. действие
Действия Struts 2 не заставляют вас реализовывать какой-либо интерфейс или расширять класс, вам нужно всего лишь реализовать методexecute(), который возвращает строку, указывающую, какая страница результатов должна возвращаться.
package com.example.user.action; public class LoginAction{ //business logic public String execute() { return "success"; } }
Вstruts.xml настройте класс действия сaction tag иclass attribute. Определите, какая страница результатов должна возвращаться пользователю, с помощьюresult tag и имени действия, которое вы можете использовать для доступа к этому классу действий с помощьюname attribute.
pages/welcome.jsp
Теперь вы можете получить доступ к действию через суффикс расширения .action.
http://localhost:8080/Struts2Example/User/validateUser.action
.Action по умолчанию настраивается, просто измените «http://www.example.com/struts2/how-to-remove-the-action-suffix-extension-in-struts-2/[struts.action.extension] ”Значение в соответствии с вашими потребностями.
2. Дополнительный интерфейс действий
Struts 2 поставляется с дополнительным интерфейсом действий (com.opensymphony.xwork2.Action). Реализация этого интерфейса дает несколько удобных преимуществ, см. Исходный код:
package com.opensymphony.xwork2; public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public String execute() throws Exception; }
Этот интерфейс действительно прост, имеет 5 часто используемых постоянных значений:success, error, none, input and logic. Теперь класс действия может использовать значение константы напрямую.
package com.example.user.action; import com.opensymphony.xwork2.Action; public class LoginAction{ //business logic public String execute() { return SUCCESS; } }
Я не понимаю, почему многим разработчикам Struts нравится реализовывать этот интерфейс Action, лучше расширить ActionSupport.
3. ActionSupport
Класс поддержки, распространенная практика для обеспечения реализации интерфейсов по умолчанию.
ActionSupport (com.opensymphony.xwork2.ActionSupport), очень мощный и удобный класс, который обеспечивает реализацию по умолчанию нескольких важных интерфейсов:
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable { ... }
КлассActionSupport дает вам возможность:
1. Validation - Объявлен метод validate () и помещен код проверки внутри.
2. Text localization - Используйте метод GetText (), чтобы получить сообщение из пакета ресурсов.
package com.example.user.action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String username; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } //business logic public String execute() { return "SUCCESS"; } //simple validation public void validate(){ if("".equals(getUsername())){ addFieldError("username", getText("username.required")); } if("".equals(getPassword())){ addFieldError("password", getText("password.required")); } } }
В большинстве случаев вам следует расширить этот класс для удобных функций, если только у вас нет причин этого не делать. Это также очень хороший учебный класс, чтобы понять, как реализовать некоторые важные интерфейсы Struts 2.
4. Действие аннотации
Struts 2 имеет очень хорошую поддержку аннотаций, вы можете избавиться от файла XML и заменить его на@action в своем классе действий.
package com.example.user.action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.ResultPath; import com.opensymphony.xwork2.ActionSupport; @Namespace("/User") @ResultPath(value="/") public class ValidateUserAction extends ActionSupport{ @Action(value="Welcome", results={ @Result(name="success",location="pages/welcome_user.jsp") }) public String execute() { return SUCCESS; } }
Если вы хотите узнать больше об аннотации Struts 2, загрузите этотStruts 2 annotation example для практики.
Заключение
Понятно, просто расширяет классActionSupport, подходит в большинстве случаев.