В проекте Portlet (который использует Spring 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 в сеансе, выталкиваю его из сеанса в методе рендеринга и возвращаю его. . Но это все еще похоже на некрасивый хак. Любые красивые решения для этого?