powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring обработка контроллером POST сообщения
7 сообщений из 7, страница 1 из 1
Spring обработка контроллером POST сообщения
    #38567594
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Пишу простое приложение Spring MVC, которое должно отображать в браузере список информации. Информация берется из MS SQL в виде хранимой процедуры со списком параметров (фильтры для данных).
Форма представления реализована в jspx с формой (тег form:form) и кнопкой "submit" для изменения фильтра.
Первоначальное отображение представления происходит с помощью GET метода;
отправка данных формы осуществляется с помощью POST.

Обрабатывает форму контроллер который имеет две процедуры для GET и POST методов.

При нажатии в браузере кнопки "обновить" появляется сообщение "To display the web page again, IE needs to resend the information you've previously subbmited".

Как обойти это?

С Уважением,
Александр.

list.jspx:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page" 
     xmlns:c="http://java.sun.com/jsp/jstl/core" 
     xmlns:spring="http://www.springframework.org/tags"
     xmlns:form="http://www.springframework.org/tags/form"     
     version="2.0">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <jsp:output omit-xml-declaration="yes"/>  

    <div id="outrunFilters">
    <form:form modelAttribute="filters" id="outrunFiltersForm" method="post">
    
		<table border = "0">
    		<tr>
        		<td><b>
        			<form:label path="date">Дата:</form:label>
        		</b></td>
        		<td>
        			<form:input path="date" id="date"/>
        		</td>
    		</tr>
    		<tr>		    
        		<td><b>
        			<form:label path="cls">Вид:</form:label>
        		</b></td>
        		<td>
		            <form:select path = "cls">
		            	<form:options items="${classList}" />
		            </form:select>
		        </td>
    		</tr>        
    		<tr>
        		<td colspan = "2"><input type = "submit" value = "Фильтр"/></td>
    		</tr>
    	</table>
    </form:form>   
	</div>
	
    <div id="outruns">
	<table>
    	<thead>
    		<tr>
    			<th>Город</th>
    			<th>Название</th>
    		</tr>
    	</thead>
    	<tbody>
    		<c:forEach items="${outruns}" var="outrun">
	    		<tr>
	    			<td>${outrun.city}</td>
	    			<td>${outrun.name}</td>
	    		</tr>
    		</c:forEach>
    	</tbody>
    </table>  
	</div>
    
</div>


OutrunController.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
@Controller
public class OutrunController {
	
	private static final Logger logger = LoggerFactory.getLogger(OutrunController.class);

	@Autowired
	private OutrunDao outrunDao;
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String listGet(Model model, OutrunFilters filter) {
		logger.info("GET outruns");
		return	process(model, filter);
	}

	@RequestMapping(value = "/", method = RequestMethod.POST)
	public String listPost(Model model, OutrunFilters filter) {
		logger.info("POST outruns");
		return	process(model, filter);
	}
	
	static final String CLASS_LOADING = "0";
	static final String CLASS_LOADED = "1";
	
	static Map<String, String> classList = new HashMap<String, String>();
	static {
		classList.put(CLASS_LOADING, "Загружается");
		classList.put(CLASS_LOADED, "Загружено");
	}
	
	private String process(Model model, OutrunFilters filter) {
		Date date = new Date();
		DateFormat dateTimeFormat = DateFormat.getDateTimeInstance();
		model.addAttribute("serverTime", dateTimeFormat.format(date));

		if (filter.getDate()==null || filter.getDate()=="") {
			DateFormat dateFormat = DateFormat.getDateInstance();
			filter.setDate(dateFormat.format(date));
		}
		if (filter.getCls()==null || filter.getCls()=="")
			filter.setCls(CLASS_LOADING);
		logger.info("Filter: date="+filter.getDate()+
				" class="+filter.getCls());
		model.addAttribute("filters", filter);
		model.addAttribute("classList", classList);
		
		List<Outrun> outruns = outrunDao.findAll(Integer.parseInt(filter.getCls()), new java.sql.Date(date.getTime()));
		model.addAttribute("outruns", outruns);		
		logger.info("No. of outruns: " + outruns.size());
		
		return "list";
	}
} 
...
Рейтинг: 0 / 0
Spring обработка контроллером POST сообщения
    #38567596
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Spring обработка контроллером POST сообщения
    #38567605
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
А Как это реализовать в Spring????
...
Рейтинг: 0 / 0
Spring обработка контроллером POST сообщения
    #38567609
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin Blazkowicz
А Как это реализовать в Spring????
Вот так
...
Рейтинг: 0 / 0
Spring обработка контроллером POST сообщения
    #38567777
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да RTFM, это очень мудро :\ но, про "работу напильником", там почему-то нет…

После применения PRG pattern не хочет сохраняться данные в RedirectAttributes…
При выполнении POST – данные фильтра одни, помещаю их с помощью addFlashAttribute и делаю редирект на GET… данные фильтра другие ((

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
@Controller
public class OutrunController {
	
	private static final Logger logger = LoggerFactory.getLogger(OutrunController.class);

	@Autowired
	private OutrunDao outrunDao;
	
	@RequestMapping(value={"/", "/list"}, method = RequestMethod.GET)
	public String listGet(Model model, OutrunFilters filter)	{
		logger.info("GET outruns");
		return	process(model, filter, null);
	}

	@RequestMapping(value={"/", "/list"}, method = RequestMethod.POST)
	public String listPost(Model model, OutrunFilters filter,
			RedirectAttributes redirectAttributes) {
		logger.info("POST outruns");
		return	process(model, filter, redirectAttributes);
	}
	
	static final String CLASS_LOADING = "0";
	static final String CLASS_LOADED = "1";
	
	static Map<String, String> classList = new HashMap<String, String>();
	static {
		classList.put(CLASS_LOADING, "Загружается");
		classList.put(CLASS_LOADED, "Загружено");
	}
	
	private String process(Model model, OutrunFilters filter, 
			RedirectAttributes redirectAttributes) {
		Date date = new Date();
		DateFormat dateTimeFormat = DateFormat.getDateTimeInstance();
		model.addAttribute("serverTime", dateTimeFormat.format(date));

		if (filter.getDate()==null || filter.getDate()=="") {
			DateFormat dateFormat = DateFormat.getDateInstance();
			filter.setDate(dateFormat.format(date));
		}
		if (filter.getCls()==null || filter.getCls()=="")
			filter.setCls(CLASS_LOADING);
		logger.info("Filter: date="+filter.getDate()+
				" class="+filter.getCls());
		if (redirectAttributes==null) {
			model.addAttribute("filters", filter);
			model.addAttribute("classList", classList);
		} else {
			redirectAttributes.addFlashAttribute("filters", filter);
			return "redirect:/list";
		}
		
		List<Outrun> outruns = outrunDao.findAll(Integer.parseInt(filter.getCls()), new java.sql.Date(date.getTime()));
		model.addAttribute("outruns", outruns);		
		logger.info("No. of outruns: " + outruns.size());
		
		return "list";
	}
}



P.S. В servlet-context.xml строчка "<mvc:annotation-driven />" есть...
P.S.S. Я использую "org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver"
...
Рейтинг: 0 / 0
Spring обработка контроллером POST сообщения
    #38567890
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прорыл Интернет ... по всем "examples" должно работать... ((
Может дело в "org.springframework-version" = 3.1.1.RELEASE ??????

Помогите!
...
Рейтинг: 0 / 0
Spring обработка контроллером POST сообщения
    #38570160
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переписал с использованием @SessionAttributes - работает

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
@Controller
@SessionAttributes("filters")
public class OutrunController {
	
	private static final Logger logger = LoggerFactory.getLogger(OutrunController.class);

	@Autowired
	private OutrunDao outrunDao;
	
	@RequestMapping(value={"/", "/list"}, method = RequestMethod.GET)
	public String listGet(Model model)	{
		logger.info("GET outruns");
		
		Date date = new Date();
		DateFormat dateTimeFormat = DateFormat.getDateTimeInstance();
		model.addAttribute("serverTime", dateTimeFormat.format(date));

		OutrunFilters filters;
		if (!model.containsAttribute("filters"))
			model.addAttribute("filters", filters = new OutrunFilters());
		else
			filters = (OutrunFilters)model.asMap().get("filters");
		
		if (filters.getDate()==null || filters.getDate()=="") 
			filters.setDate(date);
		if (filters.getCls()==null || filters.getCls()=="")
			filters.setCls(OutrunFilters.CLASS_LOADING);
		logger.info("Filter: "+filters.toString());
		
		model.addAttribute("filters", filters);
		model.addAttribute("classList", OutrunFilters.classList);
		model.addAttribute("cityList", outrunDao.getCitys());
		
		List<Outrun> outruns = outrunDao.findAll(filters);
		model.addAttribute("outruns", outruns);		
		logger.info("No. of outruns: " + outruns.size());
		
		return "list";
		
	}

	@RequestMapping(value={"/", "/list"}, method = RequestMethod.POST)
	public String listPost(Model model, @ModelAttribute("filters") OutrunFilters filters) {
		logger.info("POST outruns");
		logger.info("Filter: "+filters.toString());		
		return "redirect:/list";		
	}
	
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring обработка контроллером POST сообщения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]