我有一个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>
答案 0 :(得分:0)
你正在完全围绕JSF工作。这不会起作用。 JSF要求POST请求引用视图状态,该状态是由名为javax.faces.ViewState
的隐藏字段标识的普通JSF表单。如果您想完全控制HTML,那么您应该使用简单的JSP / Servlet或基于动作的MVC框架(如Spring MVC),而不是使用托管bean的JSF页面。
关于您认为这是解决方案的真实问题,
在JSF页面中,我使用简单的HTML单选按钮。我无法将其更改为JSF
<h:selectOneRadio>
组件,因为提供给我的HTML代码,转换为JSF代码并不容易。
在这种情况下,Tomahawk's <t:selectOneRadio>
组件可能非常有用。该组件附加了layout
spread
属性,可让您使用<t:radio>
在所需标记中的任何位置放置单选按钮,而不会以<table>
结尾JSF标准<h:selectOneRadio>
组件。
E.g。
<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课程有点可疑,我建议也可以这样做,但这是一个完全独立的主题)