Отправка формы из jQuery дает javax.faces.application.ViewExpiredException: viewId: / - View / не может быть восстановлено - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть страница JSF 1.2, в которой есть переключатели, чтобы выбрать один из 2 вариантов.У меня есть функция jQuery для отправки формы с изменением в действии, но выдает эту ошибку.

javax.servlet.ServletException: viewId:/buildVehicle.jsf - View /buildVehicle.jsf could not be restored.
root cause 
javax.faces.application.ViewExpiredException: viewId:/buildVehicle.jsf - View /buildVehicle.jsf could not be restored.
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:189)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

Вот функция jQuery, которая позволяет отображать то же представление с некоторыми изменениями в параметре запроса:

var make = $('input:radio[name=selectMake]:checked').val(); //returns NI/IN     
$("form#buildVehicleForm").attr("action", "/buildVehicle/buildVehicle.jsf?action=initTrim&make=" + make);
$('form#buildVehicleForm').submit();

На странице JSF я использую простые переключатели HTML.Я не могу изменить его на компонент JSF <h:selectOneRadio>, потому что код HTML, который мне дали, нелегко преобразовать в код JSF.

<div class="filedItem margin-10px floatLeft">   
    <input type="radio" id="id1" name="selectMake" onchange="changeMake()" value="N"  />                       
</div>
<div class="filedItem margin-10px floatLeft">
<input type="radio" id="id2"  name="selectMake" onchange="changeMake()" value="I"  />
</div>

1 Ответ

0 голосов
/ 13 февраля 2012

Вы полностью прорабатываете свой путь вокруг JSF. Это не сработает. JSF требует, чтобы запрос POST имел ссылку на состояние представления, которое в обычных формах JSF идентифицируется скрытым полем с именем javax.faces.ViewState. Если вы хотите получить полный контроль над HTML, вам следует вместо этого использовать простой JSP / Servlet или основанную на действии инфраструктуру MVC, такую ​​как Spring MVC, а не страницу JSF с управляемым компонентом.

Что касается вашей реальной проблемы, для которой вы думали, что это решение,

На странице JSF я использую простые переключатели HTML. Я не могу изменить его на компонент JSF <h:selectOneRadio>, потому что HTML-код, который мне дали, нелегко преобразовать в код JSF.

В этом случае компонент Томагавка <t:selectOneRadio> может быть очень полезным. Этот компонент поставляется с дополнительным атрибутом layout spread, который позволяет вам позиционировать переключатели везде в разметке, которую вы хотите, используя <t:radio>, не заканчивая <table> в качестве JSF стандартный <h:selectOneRadio> компонент делает.

1029 * Е.Г. *

<t:selectOneRadio id="foo" value="#{bean.foo}" layout="spread">
    <f:selectItems value="#{bean.foos}" />
</t:selectOneRadio>
...
<div class="filedItem margin-10px floatLeft">
    <t:radio for="foo" index="0" />
</div>
<div class="filedItem margin-10px floatLeft">
    <t:radio for="foo" index="1" />
</div>
...

(кстати, ваши CSS-классы несколько сомнительны, я бы посоветовал поработать и над этим, но это совершенно отдельный предмет)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...