我有一個包含多個組件的窗體,其中一些窗體有自己的驗證和/或是必需的。然後,我也有幾個selectOneMenu
組件在其列表中具有相同的三個selectItem
元素。我已經定義了三個commandButton
,以便爲所有列表(每個可能值一個commandButton
)選擇相同的值。JSF - 驗證前從視圖更新模型值
的JSF部
<table>
<tr>
<td>
<h:outputText value="ID:" />
</td>
<td>
<h:inputText value="#{MyClass.id}" id="inTxt_id" required="true">
<f:validator validatorId="CheckIDPattern" />
</h:inpuText>
<h:message for="inTxt_id" errorClass="error" />
</td>
</tr>
</table>
<table>
<tr>
<td>
<h:commandButton value="Select all opt1" action="#{MyClass.selectOpt1}" />
<h:commandButton value="Select all opt2" action="#{MyClass.selectOpt2}" />
<h:commandButton value="Select all opt3" action="#{MyClass.selectOpt3}" />
</td>
</tr>
<tr>
<td>
<h:outputText value="List 1:" />
</td>
<td>
<h:selectOneMenu value="#{MyClass.list1Val}">
<f:selectItems value="#{MyClass.listOfOptions}" />
</h:selectOneMenu>
</td>
<tr>
<td>
<h:outputText value="List 2:" />
</td>
<td>
<h:selectOneMenu value="#{MyClass.list2Val}">
<f:selectItems value="#{MyClass.listOfOptions}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
//Many other selectOneMenu components...
</tr>
</table>
<h:commandButton action="#{MyClass.saveLists}" value="Submit" />
MyClass.java
public String selectOpt1(){
this.list1Val = 1;
this.list2Val = 1;
//...
return "";
}
//The same idea for selectOpt2 and selectOpt3.
在這種情況下,如果我的用戶按下的我的 「全選」 按鈕一個沒有填充所述ID inputText
,它收到錯誤信息,但我不想要它,因爲我想他們還沒有完成填寫表單。我只想在用戶按下「保存列表」按鈕時執行驗證。
我試着將immediate="true"
添加到我的「全選」按鈕中,它可以工作,但它不會更新模型中的視圖,然後用戶看不到值已經更改...所以它確實沒有工作。
我想達到什麼目的?我只想在最後一個按鈕(提交)時執行驗證。所以我的用戶可以使用這些「全選」按鈕,而不必填寫以前的強制性組件。
我希望你能理解我的背景。隨意要求澄清。 在此先感謝。
嗯...這個bean會話範圍,但我正在** JSF 1.2 **(因爲某些原因我已經無法遷移到JSF 2.0 :()。可這是解決方案適合我的JSF版本?謝謝! – jmrodrigg
好吧,這對JSF 1.x不起作用。一種選擇是使用像RichFaces這樣的庫,因爲這增加了ajax功能。我在過去使用它,它是一種易於入門查看我的編輯 – rbento
感謝您的回答,它肯定是我的錯,我沒有詳細說明我使用的是什麼技術,是的,我也使用RichFaces,我使用'a4j:support',但是我不能正確地解決問題,謝謝你的相關話題,我會研究它 – jmrodrigg