Инициализация ActionForm Struts 1 с данными из объекта HttpSession - PullRequest
0 голосов
/ 29 февраля 2012

Я сделал это с полдюжины раз, поэтому я знаю, что это возможно.Я просто не могу вспомнить, как.

Я хотел бы инициализировать свойство Struts 1 ActionForm с данными из объекта HttpSession пользователя, но только при первом создании формы.На самом деле не стоит сильно беспокоиться о том, что он исходит от HttpSession, важен только тот факт, что данные являются динамическими для каждого пользователя и должны быть инициализированы только один раз.

Дополнительно, если пользователь меняетданные в этом поле, запись пользователя должна сохраняться.Другими словами, когда пользователь впервые увидит форму, он увидит инициализированные данные.Если они затем изменят поле и отправят форму (вызвав соответствующее действие) и впоследствии вернутся к этой форме позже, они должны увидеть ИХ запись в этом поле.

Очевидно, инициализация поля в struts-config.XML не будет работать, потому что данные динамические и для каждого пользователя.То же самое можно сказать и о конструкторе формы.Я вижу, что метод reset () ActionForm будет вызываться для сброса свойств в состояние по умолчанию, но я не помню, вызывался ли он до первой загрузки формы и ее отображения на странице.Я полагаю, если это вариант, но я бы хотел, чтобы он только инициализировал при первом вызове.Это звучит немного сложнее (мне нужен флаг переменной члена boFirstTime или что-то в этом роде?).

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 26 марта 2012

В итоге я переопределил reset () ActionForm и установил желаемое свойство, только если оно пустое или пустое.Свойство, которое мне нужно было инициализировать, представлено в переменной члена класса _strMailTo (да, я не знаю никого, кроме меня больше используются подчеркивания для переменных-членов).

Оказывается, что reset () также вызывается перед свойствами ActionFormиспользуются впервые для заполнения полей формы для связанного действия.Таким образом, в первый раз, когда пользователь видит форму, мои предварительно заполненные данные находятся там.Но если они меняют его и позже снова попадают в форму, они видят текст, который они поместили в поле в последний раз, когда они отправили форму....

public void reset(ActionMapping mapping, HttpServletRequest request) {
    if (_strMailTo == null || _strMailTo.equals("")) {
        String strRemoteUser = request.getRemoteUser();
        _strMailTo = chOps.UtilityUsers.getEmail(strRemoteUser);
    }
}
...