Я написал пользовательский компонент, который является простой формой.После отправки формы, я хочу проверить форму и в случае ошибки, я хочу отобразить их.Я попытался создать метод с сопоставлением запросов POST в моем классе MyFormComponentController extends AbstractAcceleratorCMSComponentController<MyFormComponentModel>
, но он выдает ошибку, в которой говорится, что метод недопустим.Поэтому я написал контроллер и добавил действие к своему компоненту формы
@Controller
@RequestMapping(value = "/action")
public class MyFormPageController extends AbstractPageController {
@RequestMapping(method = RequestMethod.POST)
public String doMyPageController(@Valid final MyForm myForm, final BindingResult bindingResult, final Model model)
return ???; //..in case of error?
Но когда в моей форме есть ошибка, и я не хочу возвращаться, возвращается к виду, отображается только компонент.Я пытался передать туда значение, которое я получил от метода getView()
в моем компонентном контроллере, но это не помогло.
РЕДАКТИРОВАТЬ: Я также пытался сделать отправку формы с помощью вызова ajax, например:
$(document).on("submit",'#myForm', function(e){
e.preventDefault();
var postData = $("#myForm").serialize();
var url= $(".js-my-action").data("url");
$.ajax({
url: url,
data: JSON.stringify(postData),
type: "POST",
success: function (response){
}
});
})
и метод, который я хочу вызвать:
@RequestMapping(value = "/action", method = RequestMethod.POST)
public String doMyPageController(@RequestBody @Valid final MyForm catalogOrderForm, final Model model) throws IOException, JaloBusinessException, CMSItemNotFoundException {
Здесь я попытался изменить @RequestBody
на @ModelAttribute
с именем формы, но я получаю только Acces denied (CSRFToken)
ошибка:
ERROR [hybrisHTTP24] [SikoAcceleratorAccessDeniedHandler] Access denied happend - org.springframework.security.web.csrf.InvalidCsrfTokenException: Invalid CSRF Token '66d045fd-c9ae-4210-ae97-f2a0e739bcbf"' was found on the request parameter 'CSRFToken' or header 'CSRFToken'.
Данные, которые я передаю в вызове ajax:
"firstName=Test&lastName=Test&street=Test&city=Test&postalCode=38801&email=test%40test.com&_inspiration=on&_kitchen=on&_door=on&_gdpr=on&CSRFToken=66d045fd-c9ae-4210-ae97-f2a0e739bcbf"
Затем я попытался передать данные в вызове ajax, как:
data: {myForm: postData}
но это тоже не сработало.