Заменить эту строку:
StreamWriter sw = new StreamWriter("c:/file.txt");
с помощью этого кода:
StreamWriter sw = File.AppendText("c:/file.txt");
, а затем записать вашу строку в текстовый файл следующим образом:
sw.WriteLine("text content");
Возможно, это немного упрощенно, но пробовали ли вы добавить это в свою модель? То есть, включите модель в аргументы вашего метода, затем добавьте к нему BindingResult, который затем станет доступным в вашем представлении.
model.addAttribute("binding",binding);
Я думаю, вам, возможно, придется использовать переадресацию, а не перенаправление (в голове я не могу вспомнить, теряет ли перенаправление сеанс или нет - я могу ошибаться, так как у меня нет под рукой документации, то есть, если вы не получаете результат BindingResult после его добавления в модель, попробуйте вместо этого использовать переадресацию, чтобы подтвердить это).
Проблема в том, что вы перенаправляете на новый контроллер, а не отрисовываете представление и возвращаете обработанную страницу формы. Вам нужно сделать что-то вроде:
String FORM_VIEW = wherever_your_form_page_resides
...
if (binding.hasErrors())
return FORM_VIEW;
Я бы оставил пути вне каких-либо методов из-за дублирования кода строк.
Единственный способ сохранить объекты между запросами (т. Е. Перенаправление) - это сохранить объект в атрибуте сеанса. Таким образом, вы должны включить «HttpServletRequest request» в параметры метода для обоих методов (т.е. get и post) и получить объект через request.getAttribute («привязка»). Тем не менее, и, поскольку вы не пробовали это лично, вам может потребоваться выяснить, как повторно привязать привязку к объекту в новом запросе.
Еще один «неприятный» способ - просто изменить URL-адрес браузера с помощью javascript