2012-07-01 68 views
0

我想弄清楚下面的問題。我有一個簡單的富有:選擇禁用selectOne禁用時的驗證

<rich:select listWidth="310" id="userSelect" value="#{departmentBacking.selectedUserId}" 
disabled="#{departmentBacking.unassignCheckbox}"enableManualInput="true" defaultLabel="#{not departmentBacking.unassignCheckbox ? 'start typing a surname...' : 'Uncheck unassign departments first'}"> 

     <f:selectItems value="#{departmentBacking.userList}" var="user" itemValue="#{user.id}" itemLabel="#{user.surname} #{user.name} - #{user.email}" /> 

</rich:select> 

它選擇一個稍後被設置爲某個部門領導的人。效果很好。但是,如果我只需要取消分配部門,而不選擇新部門,就會出現問題。如果unnassignCHeckbox被選中,我根本不想使用這個值。但是,我無法讓jsf引擎執行回發,因爲我總是收到驗證錯誤。

MyForm:userSelect: Validation Error: Value is not valid 

我認爲這是因爲#{user.id}的默認值是0,並且在userList中沒有找到具有此id的用戶。該bean是查看範圍。有沒有辦法以某種方式跳過驗證或排除富人:從提交表單中選擇?

回答

0

嘗試添加一個帶有0值和「SELECT」標籤(或其他)的<f:selectItem>。這將解決您的問題,並添加一個驗證,當未選中unnassignCHeckbox時,selectedUserId值必須大於0(僅當它尚未實現時才最後一次)。

<rich:select listWidth="310" id="userSelect" value="#{departmentBacking.selectedUserId}" 
    disabled="#{departmentBacking.unassignCheckbox}"enableManualInput="true" 
    defaultLabel="#{not departmentBacking.unassignCheckbox ? 'start typing a surname...' : 'Uncheck unassign departments first'}"> 

    <f:selectItem itemValue="0" itemLabel = "SELECT SURNAME" /> 
    <f:selectItems value="#{departmentBacking.userList}" var="user" 
     itemValue="#{user.id}" 
     itemLabel="#{user.surname} #{user.name} - #{user.email}" /> 

</rich:select> 
+0

哇,我沒有意識到我可以結合f:selectItem f:selectItems這樣。 Tkinking現在它是非常明顯的;) 我想可以使用此作爲解決方法。感謝Luiggi。 – forest

+0

@forest歡迎你。如果這是您正在尋找的答案,請不要忘記[將此帖標記爲答案](http://meta.stackexchange.com/a/5235/182862)。歡迎來到StackOverflow :)。 –