В проект на 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 в сесия, да го извадя от сесията в метода за рендиране и да го върна . Но това все още се чувства като неприятен хак. Някакви красиви решения за това?