Подтвердить что ты не робот

Spring MVC: относительные проблемы с URL

У меня есть контроллер, связанный с URL: "/ruleManagement".

Внутри моего JSP у меня есть форма, которая направляет (на отправке) на url "ruleManagement/save". Когда есть ошибки с полями ввода, я хочу, чтобы он возвращал исходную форму View. Здесь начинается проблема...

Проблема 1) Теперь, когда URL-адрес "/ruleManagement/save", моя форма submit теперь указывает на "/ruleManagement/ruleManagement/save".

Проблема 2) Я попытался использовать тэг spring: url для генерации абсолютных путей для меня, что обычно отлично работает. Но когда я помещаю тег spring: url внутри тега, тег spring: url не получает правильную разборку.

<form:form action="<spring:url value='/ruleManagement/save' ...>" method="post">

Когда я анализирую DOM после загрузки страницы, мой тег формы выглядит примерно так:

<form action='<spring:url value="/ruleManagement/save" />' ... >

Если я не использую тег spring: url и вместо этого использую только "/ruleManagement/save", генерируемый url исключает мое имя приложения в URL-адресе, что также неверно.

Как создать последовательный шаблон URL во всех представлениях независимо от пути? Если ответ "using spring: url", как мне получить этот контент внутри формы: тег формы?

4b9b3361

Ответ 1

Пользовательские теги в JSP нельзя использовать в атрибутах других настраиваемых тегов, поэтому вам нужно сохранить промежуточный результат в атрибуте запроса (используя var для перенаправления вывода тега в атрибут запроса, является общей идиомой, поддерживаемой несколькими тегами):

<spring:url var = "action" value='/ruleManagement/save' ... />
<form:form action="${action}" method="post"> 

Ответ 2

Мне тоже хотелось бы создать последовательный URL-адрес во всех представлениях! Возможно ли это с <spring:url .../>.

Чтобы ответить на ваш второй вопрос и надавить на ответ axtavt, вставьте <spring:url ... /> в действие формы после добавления свойства htmlEscape="true"

Пример: <form:form action="<spring:url value="/ruleManagement/save" htmlEscape="true" .../>" method="post">