Портлет: форма, которая подчиняется либо действию, либо непосредственно фазе рендеринга?

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


person yankee    schedule 17.01.2012    source источник


Ответы (1)


Из-за отсутствия ответов, похоже, нет способа решить эту проблему с помощью портальных способов, но я наткнулся на Как вы преодолеваете ограничение на вложенность html-форм? и спасибо shovavnik, похоже, что по крайней мере в какой-то момент html 5 станет спасением.

person yankee    schedule 16.06.2012