Хобрук: Ваш путь к мастерству в программировании

Как использовать параметры, объекты запроса и сеанса, присутствующие в ActionContext?

Здесь, в этом коде, я использую ActionContext для получения сеанса и ServletActionContext из объекта запроса. Я считаю, что это плохая практика, так как нужно использовать ActionContext только для объекта запроса.

Эквивалентен ли объект запроса ActionContext объекту запроса в сервлетах? Если да, то как с его помощью получить параметры запроса?

Map session = (Map) ActionContext.getContext().getSession();
HttpServletRequest request = ServletActionContext.getRequest();
String operatorId = request.getParameter("operatorId");
session.put("OperatorId", operatorId);
// getting hashmap from Bean
analysisNames= slsLoginDetailsRemote.getAnalysisNamesIdMap(); 
// sending map for multiselect
session.put("AnalysisNames",analysisNames); 

  • использовать request.getParameter (parameter_name); 23.10.2013

Ответы:


1

В Struts2 Session Map и Request Map являются оболочками для базовых объектов HttpServletRequest и Session.

Если вам нужен только доступ к атрибутам, используйте обертки.

Используйте ActionContext для их получения (как оболочек, так и базовых объектов HTTP) только, если вы находитесь внутри Interceptor или POJO.

Если вы находитесь внутри Action, лучше всего реализовать интерфейс, который будет автоматически заполнять объект вашего действия:


Чтобы получить оболочку карты запроса, используйте RequestAware

public class MyAction implements RequestAware {
    private Map<String,Object> request;

    public void setRequest(Map<String,Object> request){ 
        this.request = request;
    }
}

Чтобы получить оболочку карты сеанса, используйте SessionAware

public class MyAction implements SessionAware {
    private Map<String,Object> session;

    public void setSession(Map<String,Object> session){ 
        this.session = session;
    }
}

Чтобы получить базовые объекты HttpServletRequest и HttpSession, используйте ServletRequestAware:

public class MyAction implements ServletRequestAware {
    private javax.servlet.http.HttpServletRequest request;

    public void setServletRequest(javax.servlet.http.HttpServletRequest request){ 
        this.request = request;
    }

    public HttpSession getSession(){
        return request.getSession();
    }
}

Тем не менее, стандартный поток данных между JSP-страницами и действиями или действиями и действиями получается с помощью аксессоров/мутаторов, более известных как геттеры и сеттеры. Не изобретайте велосипед.

23.10.2013

2

Первый

ActionContext's Request object is equivalent to the Request object in Servlets

Второй

Если вы используете такие фреймворки, как struts. Это плохая практика. Вам не нужно создавать объекты HttpServletRequest из ServletActionContext для получения параметров запроса. Просто объявите параметры запроса в классе действий и напишите для них геттеры и сеттеры, чтобы получить в них значения.

ОБНОВЛЕНИЕ

Если вам нужен параметр запроса в классе действий, вы можете сделать это следующим образом:

    public class MyAction extends ActionSupport implements SessionAware{
    private String operatorId;
    private Map<String, Object> session;


    //Getter and setters
    public String getOperatorId() {
            return operatorId;
        }

        public void setOperatorId(String operatorId) {
            this.operatorId = operatorId;
        }

@Override
    public void setSession(Map<String, Object> session) {
        this.session = session;

    }
    }

Так что теперь, если я хочу использовать operatorId где угодно, все, что я буду делать, это getOperatorId() или напрямую использовать operatorId. :)

Если найти реализацию SessionAware в классе Action более разумной, так как я могу напрямую обращаться к объектам сеанса, как упоминал @Andrea. Итак, теперь я могу напрямую использовать session.put("OperatorId", operatorId); и session.put("AnalysisNames",analysisNames);

23.10.2013
  • Если я реализую интерфейс RequestAware, как показано в приведенном выше ответе, я могу получить параметры запроса с помощью doung request.get(paramName) ??? 24.10.2013
  • Да, вы можете... но вы можете избежать этой реализации, если пишете свою логику в классе Action. Вы можете избежать интерфейса RequestAware для класса Action... См., например, мое обновление.. 24.10.2013
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..