2013-06-06 5 views
0

Я хочу, чтобы отобразить сообщение с подтверждением перед удалением какого-либо элемента в приложении, у меня есть:Javascript сообщение подтверждения в приложении Spring-MVC

функция:

function confirmDelete(delUrl) { 
    if (confirm("Are you sure ?")) { 
     document.location = delUrl; 
    } 
} 

и это контроллер:

@RequestMapping(value = "/delete_element", method = RequestMethod.GET) 
public String getInfo(@ModelAttribute User user,@RequestParam("id") int id,ModelMap model) { 
    userservice.DeleteUser(id); 
    return "ViewName"; 
} 

Это то, что я получаю: Ссылка на функцию не приводит меня к контроллеру, поэтому ничего не происходит, мы можем сказать, что запрос, отправленный javascript, не доходит до сервера .. Неужели сложно интегрировать что-либо в Spring MVC?

ответ

2

Вместо:

<form ... onsubmit="confirmDelete('${...}/delete_element')"> 

return Добавьте ключевое слово в onsubmit события по ссылке на form:

<form ... onsubmit="return confirmDelete(this, '${...}/delete_element')"> 
        ^^^^^^---- added  ^^^^--- added 


Кроме того, document.location только для чтения в некоторых браузерах. Лучше использовать window.location. Не забудьте добавить return так form представлена ​​только когда хотел:

function confirmDelete(delForm, delUrl) { // <--- changed here 
    if (confirm("Are you sure ?")) { 
     delForm.action = delUrl;   // <--- changed here 
     return true;      // <--- changed here 
    } 
    return false;       // <--- changed here 
} 
+0

Без изменений:/Я всегда вижу URL-адрес в адресной строке, но он не отправляется на контроллер. и я не вижу запроса в консоли. спасибо за ответ – Somar

+0

Итак, когда вы нажимаете '', 'confirmDelete()' никогда не вызывается? Это оно? – acdcjunior

+0

Нет, это вызвано, и функция показывает предупреждение. Я нажимаю «Ok», затем перезагружается страница, и элемент не удаляется. – Somar

5

Почему вы должны вмешиваться в URL формы действия?

<c:url var="deleteUrl" value="/delete_element" /> 
<form:form method="get" commandName="user" action="${deleteUrl}" 
     onsubmit="return confirm('Are you sure?') ? true : false;"> 

Кроме того, почему вы должны связать @ModelAttribute и/или ModelMap? Вы не отправлять или устанавливать какие-либо пользовательские данные, так что вы могли бы просто ommit что:

@RequestMapping(value = "delete_element", method = RequestMethod.GET) 
public String getInfo(@RequestParam("id") int id) { 

И немного не по теме: вы не должны использовать HTTP GET метод для изменения запросов. http://www.w3.org/TR/REC-html40/interact/forms.html#submit-format

+0

Спасибо! это было очень легко! вы имеете в виду, что я всегда должен использовать POST? – Somar

+1

GET предназначен для запросов, которые не изменяют состояние сервера (например, что-то изменить в базе данных). 'POST' более безопасны, так как параметры не регистрируются в журналах доступа, а браузеры имеют защиту воспроизведения (при нажатии на обновление вас всегда запрашивают подтверждение). Также немного легче сделать атаки XSRF для GET. –

+1

Я только что заметил, что в моем ответе был пропущен атрибут 'action' ... обновлен (также добавлен' 'для отображения URL-адреса, поскольку это правильный способ его выполнения). –