Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring SimpleFormController 
:(
    Опции темы
maz543
Дата 25.6.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Изучаю спринг.
Есть у меня контроллер и форма для создания объекта.
Можно ли использовать один и тот же контроллер для создания редактирования объекта?
Если можно, то как?
Или так делать не правильно?

Сейчас контроллер выглядит так:
Код



import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;


public class CatalogueController extends SimpleFormController {
    
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
            Object o, BindException e) throws Exception {
        Car c = (Car)o;
                        ....
        return new ModelAndView(getSuccessView());
    }

}


PM MAIL   Вверх
kez
Дата 26.6.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Доброго времени суток. Сам недавно изучаю спринг. у меня контроллер для создания/редактирования выглядит так

Код

public class InnerDocumentController extends SimpleFormController {

    private InnerDocumentDetailsService innerDocumentService;
    private EmployeeDetailsService employeeService;

    //биндер не на примитивы
    @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {

        super.initBinder(request, binder);
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
        CustomDateEditor cde = new CustomDateEditor(dateFormat, true);
        binder.registerCustomEditor(java.util.Date.class, cde);
        binder.registerCustomEditor(Employee.class, new EmployeeBinder(employeeService));
    }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
            Object command, BindException e) throws Exception {

        InnerDocument innerDocument = (InnerDocument) command;

        if (WebUtils.hasSubmitParameter(request, "update")) {
            innerDocumentService.saveInnerDocument(innerDocument);
        }
        if (WebUtils.hasSubmitParameter(request, "delete")) {
            innerDocumentService.deleteInnerDocument(innerDocument);

        return new ModelAndView(getSuccessView());
    }

    @Override
    protected Object formBackingObject(HttpServletRequest request) throws Exception {

        String objectId = request.getParameter("objectId");
        InnerDocument innerDocument = null;

        if (objectId != null && !objectId.equals("")) {
            innerDocument = innerDocumentService.getInnerDocument(Long.valueOf(objectId).longValue());
        } else {
            innerDocument = new InnerDocument();
        }

        return innerDocument;
    }

    @Override
    protected Map referenceData(HttpServletRequest request) throws Exception {
        Map<String, Object> map = new HashMap<String, Object>(5);
        map.put("employee", employeeService.getAllWorksEmployee());
        return map;
    }

    public void setInnerDocumentDetailsService(InnerDocumentDetailsService innerDocumentService) {
        this.innerDocumentService = innerDocumentService;
    }

    public void setEmployeeDetailsService(EmployeeDetailsService employeeService) {
        this.employeeService = employeeService;
    }

}


в методе formBackingObject
objectId это идентификатор редактируемого объекта. передаю из страницы представления списка записей.
PM MAIL   Вверх
Tony
  Дата 26.6.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Используйте MultiActionController.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
goodday1941
Дата 26.6.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



Цитата(Tony @  26.6.2009,  10:06 Найти цитируемый пост)
Используйте MultiActionController.

не согласен.. в данном случае как раз нужно использовать симплФормКонтроллер


Цитата(maz543 @  25.6.2009,  20:12 Найти цитируемый пост)
Можно ли использовать один и тот же контроллер для создания редактирования объекта?

конечно можно и нужно

Добавлено через 2 минуты и 4 секунды
посмотрите в сторону метода formBackingObject

Добавлено через 3 минуты и 9 секунд
этот метод формирует объект для отображения на странице 


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Tony
Дата 26.6.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Метод: referenceData работает на GET метод. Потом будут грабли в аппликации. У нас такое уже было...  smile 

Это сообщение отредактировал(а) Tony - 26.6.2009, 16:54


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
goodday1941
Дата 26.6.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



Цитата(Tony @  26.6.2009,  16:53 Найти цитируемый пост)
Метод: referenceData работает на GET метод.

причем тут referenceData? 
referenceData нужен для добавления данных в модель

на вскидку formBackingObject должен содержать код по типу:

Код

Object formBackingObject (bla bla){
int id = достаем id объекта из реквеста;
далее находим объект по ай ди
OurForm form= db.getById(id);

если не нашли то создаем новый form = new OurForm();


return form;

}



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Tony
Дата 27.6.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Simple Form Controller work flow

Это сообщение отредактировал(а) Tony - 27.6.2009, 10:10


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
maz543
Дата 27.6.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



С этим разобрался. Есть еще такой вопрос.
Как сделать редирект с одного AbstractController на другой AbstractController и передать сообщение ?

Например один AbstractController отображает список объектов, а другой удаляет,
мне надо в контроллере удаления вызвать снова контроллер просмотра и передать ему сообщение. Либо об ошибке, либо об успешной операции.

Вариант типо:
Код

return  new ModelAndView(new RedirectView("show.html"));


Мне очень не нравиться, т.к. в код ссылки зашиваются.
PM MAIL   Вверх
Tony
Дата 27.6.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Вариант правельный. Также там можно было запихать параметры какието если надо.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
maz543
Дата 27.6.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Цитата

Вариант правельный. Также там можно было запихать параметры какието если надо.


А как это сделать?

Ведь как только вызовется другой контроллер он создат свою модель вью.
PM MAIL   Вверх
goodday1941
Дата 27.6.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



Код

Map<String, Object> model = new HashMap<String, Object>();
//fill model    
return  new ModelAndView(new RedirectView("show.html"), model);



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
maz543
Дата 27.6.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Так это он передаёт параметры в урле.
А мне хотелось в сессии. зачем пользователю видеть кучу всяуих параметров в переходах
PM MAIL   Вверх
maz543
Дата 27.6.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



del




Это сообщение отредактировал(а) maz543 - 27.6.2009, 20:52
PM MAIL   Вверх
Tony
  Дата 29.6.2009, 09:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Делай сессионный бин и гоняй его по формам или храни в сесси ключ и работай с ним в разных контроллерах. Тут вопрос проектирования.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.