В проекте портлета (в котором используется весна 3.1) Рассмотрим следующую форму:
<portlet:actionURL var="actionUrl" />
<portlet:renderURL var="renderUrl" />
<form action="${actionUrl}" method="POST">
<!-- A number of checkboxes -->
With selected do:
<button type="submit" name="stuff" value="action">Action</button>
<button type="submit" name="stuff" value="render" onclick="jQuery(this).closest('form').prop('action', ${fn:escapeXml(json:json_encode(renderUrl))})">Render</button>
</form>
Как вы можете видеть, есть форма с двумя кнопками отправки.В зависимости от нажатой кнопки я либо хочу перейти к фазе действия, либо пропустить фазу действия и сразу перейти к фазе рендеринга.
Приведенный выше код работает и дает желаемый эффект, но он не очень приятный.,Это больше похоже на взлом, обмен атрибутом действия формы с использованием javascript.
Есть ли совместимый с JSR-286 способ сделать это на стороне сервера?Одна из моих идей заключалась в том, чтобы просто сделать то, что я обычно делаю на этапе рендеринга (поместить объект ModelAndView вместе) на этапе действия, сохранить ModelAndView в сеансе, извлечь его из сеанса в методе рендеринга и вернуть его.,Но это все еще похоже на неприглядный хак.Какие-нибудь красивые решения для этого?