2012-04-20 5 views
2

У меня есть стойки2 формы. В этом виде пользователя предлагается заполнить несколько полей. 2 из этих полей заполняются путем выбора объекта из другого действия.Struts 2 subaction

Фактически: основная форма => кнопка пикапа => новое действие с новой формой для заполнения => возврат к основной форме и заполнение соответствующего поля.

Моя проблема заключается в том, что после того, как пользователь закончил поддействия, я хочу вернуться к основной форме, но не потерять все, что он набит до ...

Я не знаю, как справиться с этим, я должен пройти к субакции каждого поля из основной формы?

+0

Когда вы идете на солнце, используйте метод подготовки и подготовительный интерфейс, прочтите это http://struts.apache.org/2.3.1/docs/prepare-interceptor.html –

ответ

1

Несколько способы приходят на ум, в зависимости от факторов определят лучший для вас.

1) Отправляйте все параметры, которые вы хотите сохранить каждый раз. Самый простой способ сделать это - использовать скрытые поля. Модель также может иметь смысл здесь или помещать несколько действий в один класс, так как это подчеркивает, что эти действия имеют общий набор свойств.

2) Сохраните значение в сеансе, как рекомендовал Василий, однако Struts2 имеет перехватчик видимости ... Если вам нужно делать это часто, стоит посмотреть (см. Последний пример на странице): http://struts.apache.org/2.3.1.2/docs/scope-interceptor.html однако сделать это правильно немного сложнее, потому что, если это офисное приложение, и пользователи - это что-то вроде меня, у них будет окно с дюжиной окон в любой момент времени. В этой ситуации вы захотите также добавить токен (см.: struts2 token tag) к каждому «потоку», который предотвратит один из дюжины окон при обновлении, чтобы получить последние данные из того, что я ожидал бы, получить загрязнение из какого-либо глобального магазина, который использует все действия. Есть и другие способы обработки потоков/разговоров ... например, кто-то написал плагин, который, я полагаю, выполнил бы только что объясненный: http://code.google.com/p/struts2-conversation/

Всегда стоит посмотреть плагины struts2, чтобы убедиться, t изобретать колесо, хотя я должен сказать, что не могу ручаться за этот плагин.

3) Не оставляйте их на странице. Это очень просто ... Если вам нужно выбрать дополнительные параметры, когда они нажимают кнопку «пикап», форма разворачивается с обязательными полями, а затем, когда они нажимают «обновить» в этом подразделе, оно близко и обновляет остальные полей. Вам понадобится комбинация JS на стороне клиента, как правило, с ответом XML или JSON. Для ваших собственных страниц JSON - это более простой способ, чтобы произвести ответы JSON, см. struts2-json-plugin.

В большинстве случаев я бы пошел с №3. Возможно, №1, если бы я знал, что действие будет использоваться только из вызывающего действия и/или мне нужна безопасная закладная форма (передайте все параметры, если это возможно, с помощью GET). # 2 в более сложных сценариях, где необходимо несколько действий для совместной работы, и я не мог использовать ajax по какой-то странной причине. Примечание № 3 и № 2 не очень дружелюбны к книгам, и они, как правило, не очень дружелюбны друг к другу, не используя хранилище на стороне клиента.

0

Сохраните вашу основную форму в сеансе.

public class Test extends ActionSupport implements Preparable { 

    private MainForm form; 

    public void prepare(){ 
    form =  (MainForm)ServletActionContext.getRequest().getSession().getAttribute("mainForm"); 
    if(form == null) { 
     form = new MainForm(); 
    } 
    } 

    public String execute(){ 
    //Do something useful 
    //Do something useful 
    //Do something useful 
    return SUCCESS; 
    } 

    public MainForm getForm() { 
    return form; 
    } 

    public void setForm(MainForm form) { 
    this.form = form; 
    } 

Метод «готовят» является частью Подготовительной интерфейса. Он будет выполняться перед всеми показаниями параметров и до «запуска» метода каждый раз, когда ваш вызов acton.

0

Вам необходимо следующее иметь рабочую Struts2 платформу:

  1. 2 распорки образуют классы с полями
  2. распорки класс действия
  3. страница JSP
  4. распорки конфигурационный файл

Далее следует обработать нижеследующий процесс:

  • Когда первая форма загружаются сохранить его боб во второй форме через поле
  • После возвращения из первой формы загрузить свои поля во второй формы через поле выше