2011-08-12 66 views
1

這是我jsfpage列表框:在我的構造我JSF頁面拋出j_idt9:螺柱:驗證錯誤:值無效

private Student student; 
    private List<Student> gezochteStudenten; 

<h:selectOneListbox id="stud" value="#{inschrijven.student.studentnr}"> 
       <f:selectItems value="#{inschrijven.gezochteStudenten}" var="st" itemLabel="#{st.studentnr}" itemValue="#{st.studentnr}"/></h:selectOneListbox> 
我managedBean Inschrijven.java

使學生屬性:

student = new Student(); 

所以首先我搜索的學生=> gezochteStudenten 這作品中,我調試和它的工作像它應該...

但是當我點擊按鈕「schrijfin」它提供了一個例外,它甚至不會去我的方法: j_idt9:螺柱:驗證錯誤:值無效

任何想法如何這是可能的,我該如何解決這個問題?

財產studentnr是在類型爲「String」的兩側,這不會是問題...

回答

0

在形式的驗證階段提交請求時,JSF將基本重新遍歷選擇項目值並使用Object#equals()方法比較提交的值。如果提交的值與任何選擇項值不匹配,那麼您將得到此驗證錯誤。

在您的特定情況下,此驗證錯誤表明#{inschrijven.gezochteStudenten}"在處理表單提交請求期間沒有像在顯示錶單期間那樣返回完全相同的列表。這反過來表明,您的#{inschrijven}託管bean是請求作用域,並且屬性gezochteStudenten未在bean的(後期)構建期間填充,而是在上一個操作的某個事件方法期間填充。請求範圍的bean在響應完成時被垃圾回收,並且在表單提交請求期間構建一個全新的bean。

有幾種方法可以解決這個問題,這取決於您使用的JSF規範版本和可用的comopnent庫。您沒有提及/標記您的問題中使用的JSF規範版本,但您的<f:selectItems>聲明提示您正在使用JSF 2.x(在JSF 2.0中引入了var屬性),因此您可以利用新的JSF 2.0 查看範圍。如果將#{inschrijven}託管bean放在視圖範圍中,則應解決此問題。在處理表單提交的過程中將使用同一個bean,就像在顯示錶單時一樣。

@ManagedBean 
@ViewScoped 
public class Inschrijven { 
    // ... 
}