Работа с действиями Struts 2

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