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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальне объекты в контроллере, annotation spring mvc controller 
:(
    Опции темы
Flogrimm
Дата 1.4.2010, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как мне в spring mvc annotation-контроллере передать на страницу объекты, чтобы они были глобальными для всех методов. Т.е. если я передам на страницу через model объект в GET-методе, но в POST методе снова нужно передавать его. Есть способ сделать это единожды?

Код

/**
 * AddQuestionaryController.java
 */
package web;

import idao.IQuestionaryDao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import validator.QuestionaryValidator;
import beans.Questionary;
import beans.User;

@Controller
public class AddQuestionaryController {

    @Autowired
    public IQuestionaryDao questionaryDao;

    @ModelAttribute("questionary")
    public Questionary getQuestionObject() {
        return new Questionary();
    }

    @RequestMapping(value = "/questionaries/new", method = RequestMethod.GET)
    public String setupForm(Model model) {
        model.addAttribute("questionaries", questionaryDao.getAllObjects());
        model.addAttribute("pagetitle", "Управление опросниками");
        model.addAttribute("questionary", new Questionary());
        return "questionaries/form";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processSubmit(
            @ModelAttribute("questionary") Questionary questionary,
            BindingResult result) {

        new QuestionaryValidator().validate(questionary, result);

        if (result.hasErrors())
            return "questionaries/form";

        User user = (User) SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal();

        questionary.getUsers().add(user);

        questionaryDao.saveObject(questionary);

        return "redirect:/questionaries/new";
    }

    @RequestMapping(value = "/questionaries/{questionaryId}/{action}", method = RequestMethod.GET)
    public String setupEditForm(@PathVariable("action") String action,
            @PathVariable("questionaryId") long questionaryId, Model model) {
        
        model.addAttribute("questionaries", questionaryDao.getAllObjects());
        
        if (action.equals("delete")) {
            questionaryDao.deleteObject(questionaryId);
            return "redirect:/questionaries/new";
        }
        
        Questionary questionary = questionaryDao.getObject(questionaryId);
        model.addAttribute("questionary", questionary);
        return "questionaries/form";
    }

}

PM MAIL   Вверх
Kangaroo
Дата 1.4.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Цитата(Flogrimm @  1.4.2010,  07:39 Найти цитируемый пост)
Т.е. если я передам на страницу через model объект в GET-методе, но в POST методе снова нужно передавать его. Есть способ сделать это единожды?

Че-то не понял я проблемы, попробуй еще раз объяснить. Можешь на примере твоего кода, так будет легче.


--------------------
Lost....
PM MAIL MSN   Вверх
Flogrimm
Дата 1.4.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, сорри.

Я захожу на страницу "questionaries/new", это ГЕТ. В нее передается атрибут "pagetitle". Когда я отправляю данные через форму — это ПОСТ. 

Например я ввел что-нибудь неправильно, сработала валидация 

Код

        if (result.hasErrors())
            return "questionaries/form";


и я попал на эту же страницу, только уже через ПОСТ.

И вот, если в методе 

Код

    @RequestMapping(method = RequestMethod.POST)
    public String processSubmit(


не положить в model "pagetitle", то этот объект с jsp-страницы будет недоступен.

Не хочется дублировать model.addAttribute всех объекты в ПОСТ-методе, хочется в контроллере положить их в страницу один раз.
PM MAIL   Вверх
afon
Дата 1.4.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно вот этот участок 

Код

model.addAttribute("questionaries", questionaryDao.getAllObjects());
        model.addAttribute("pagetitle", "Управление опросниками");
        model.addAttribute("questionary", new Questionary());


вынести в отдельный метод. В неаннотированных контроллерах это решалось простым наследованием от XYZ_FormController, который все за тебя делал.
PM MAIL WWW   Вверх
Flogrimm
Дата 1.4.2010, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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