Spring MVC - Переменные между страницами и сброс атрибута SessionAttribute - PullRequest
4 голосов
/ 09 июня 2011

Вопрос звучит странно, я играю с Spring MVC и пытаюсь перемещаться между двумя страницами, и в основном я создаю страницу JSP с использованием Spring Form JSTL, поэтому она просто использует POST, и я использую контроллер дляперейти с одной страницы на следующую.Но модели теряются от страницы к странице, и я хотел бы скрыть фактическую переменную, чтобы QueryStrings исключался (насколько я знаю).Я знаю, что могу использовать InternalResourceView, но позволяет мне использовать только модель.

Я хочу передать переменную, которая будет эксклюзивной для этой страницы, как лучше без модели или без использования QueryStrings?

Я планировал использовать SessionAttribute, чтобы легко определить их, но былИнтересно, как вы удалите созданную переменную SessionAttribute?Я попробовал HttpSession.removeAttribute, но он не работает.

Ответы [ 4 ]

5 голосов
/ 14 июня 2011

Вы также можете использовать SessionStatus.setComplete () следующим образом:

@RequestMapping(method = RequestMethod.GET, value="/clear")
public ModelAndView clear(SessionStatus status, ModelMap model, HttpServletRequest request) {
    model.clear();
    status.setComplete();
    return new ModelAndView("somePage");
}

или DefaultSessionAttributeStore.cleanUpAttribute следующим образом:

@RequestMapping(method = RequestMethod.GET, value="/clear")
public ModelAndView clear(DefaultSessionAttributeStore status, WebRequest request, ModelMap model) {
    model.remove("mySessionVar");
    status.cleanupAttribute(request, "mySessionVar");
    return new ModelAndView("somePage");
}

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

3 голосов
/ 09 июня 2011

Вы можете использовать метод removeAttribute из класса HttpSession.

3 голосов
/ 09 июня 2011
2 голосов
/ 04 февраля 2013

вы можете использовать WebRequest.removeAttribute(String name, int scope), который работает с Spring @SessionAttributes.Цитата @SessionAttributes javadoc - "В качестве альтернативы рассмотрите возможность использования возможностей управления атрибутами общего интерфейса {@link org.springframework.web.context.request.WebRequest}."

Такжепосмотрите на мой пример.

@Controller
@SessionAttributes({"sessionAttr"})
public class MyController {

    @ModelAttribute("sessionAttr")
    public Object defaultSessionAttr() {
        return new Object();
    }

    @RequestMapping(value = "...", method = RequestMethod.GET)
    public String removeSessionAttr(WebRequest request, Model model) {
        request.removeAttribute("sessionAttr", WebRequest.SCOPE_SESSION);

        model.addAttribute("sessionAttr", defaultSessionAttr());
        return "myView";
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...