2012-02-13 71 views
0

我有一個JSF 1.2頁面,它有單選按鈕來選擇2個選項之一。我有一個jQuery函數來提交表單的動作更改,但給出此錯誤。從jQuery提交表單提供了javax.faces.application.ViewExpiredException:viewId:/ - 查看/無法恢復

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的功能,提交給呈現了同樣的看法與要求PARAM一些變化:

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(); 

在我使用簡單的HTML單選按鈕的JSF頁面。我無法將其更改爲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

您完全正在圍繞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>組分可以是非常有益的。該組件附帶spread的附加layout屬性,它允許您使用<t:radio>在所需標記中的任意位置放置單選按鈕,而不會像JSF標準<h:selectOneRadio>組件那樣在<table>中結束。

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類是有點腥,我建議對這項工作爲好,但這是一個completelely獨立的學科)

+0

感謝BalusC快速回復!我正在使用Sun的RI Mojarro JSF實現。我不能有t:收音機,是不是有richfaces?我應該只使用JSF,JSTL和Richfaces。 – 2012-02-13 02:30:28

+0

好吧,那是運氣不好。你最好的選擇是爲''寫一個自定義的渲染器。 Tomahawk是開源的,因此可以提供一些見解。 RichFaces沒有類似的組件。只有Tomahawk,ICEfaces和PrimeFaces。 ICEfaces實際上是Tomahawk的一個克隆。或者,你也可以說服你的主角使用戰斧。在不到一個小時的時間內,您可以準備好而不是幾天甚至幾周。 – BalusC 2012-02-13 03:37:26

+0

哦,順便說一下,請不要成爲Tomahawk只能與MyFaces合作的舊神話的受害者,而不是Mojarra。這完全是無稽之談。 – BalusC 2012-02-13 03:41:15