0

Я хочу получить URL-адрес предыдущей страницы в своем контроллере Java PlayFramework. Я знаю, что это возможно, чтобы получить его:Возврат на предыдущую страницу после непрерывных неудачных представлений формы в структуре воспроизведения

String refererUrl = request().getHeader("referer"); 

Но представьте страницу, которая содержит форму с Чеховым и кнопкой CANCEL. Если пользователь нажимает кнопку «Сохранить», форма будет контролироваться в контроллере, и если будут существовать некоторые ошибки, то она перейдет на ту же страницу и попросит пользователя исправить форму.

Теперь представьте, что пользователь не вводил данные правильно, поэтому он возвращается к форме, чтобы исправить ее. теперь пользователь снова не исправляет форму и нажимает SAVE во второй раз. поэтому он будет перенаправлен снова в форму. Теперь, если пользователь нажимает отменить, он перейдет на последнюю страницу, которая является формой с ошибками, и это не то, что я хочу.

Одним из способов является предоставление предыдущего URL-адреса в качестве параметра страницы. но мне не очень нравится иметь длинные URL-адреса, так есть ли другое решение?

ответ

1

Вы можете использовать Ajax запросы для формы представления и сделать свое перенаправление в JavaScript. Таким образом, вы можете решить, основываясь на вашем запросе, независимо от того, в порядке или с ошибками, для перенаправления или просто обновления страницы с ошибками проверки формы.

Ваша форма может выглядеть примерно так:

<form id="myForm" method="post" action="/"> 

    <!-- My input --> 

    <button type="button">Cancel</button> 
    <input type="submit" value="Save"> 
</form> 

А в вашем JavaScript:

$("#myForm").submit(function(event) { 
    event.preventDefault(); 
    $.ajax({ 
    type: 'POST', 
    url: "mySubmitURL", 
    data: $('#myForm').serialize(), 
    success: function(response) { 
     // Redirect to the new page 
    }, 
    error: function(response) { 
     // Show your errors that you submitted in the response 
    } 
    }); 
}); 

Теперь вам нужен контроллер, который обрабатывает запрос POST и возвращает ошибку формы, как JSON в случае есть некоторые:

public Result mySubmitURL() { 
    Form<MyModel> form = Form.form(MyModel.class) 
      .bindFromRequest(); 
    if (form.hasErrors()) { 
     return badRequest(form.errorsAsJson()); 
    } 
    // Do something with your form data, e.g. store it 
    return ok(); 
} 
2

Вы могли бы передать реферер в шаблон:

Регулятор:

public Result something() { 
    String refererUrl = request().getHeader("referer"); 
    return ok(views.html.something.render(refererUrl)); 
} 

тогда вы могли бы создать условия для кнопки «Отмена».

шаблон:

@(referer: String) 

@if(referer.equals("THE_URL_YOU_DONT_WANT_TO_REDIRECT") { 
    <a href="the page you would like him to redirect"> cancel </a> 
} else { 
    <a href="@referer"> cancel </a> 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^