Работа с действиями 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, подходит в большинстве случаев.