2012-09-07 12 views
0

我有一個selectOneListbox,單擊時應該將其他參數(id)傳遞給服務器。就像現在一樣,用戶看到一個名稱列表,當他們選擇一個名稱時,我可以得到它。但是,每個名稱都有一個與之關聯的唯一ID,我不希望用戶看到 - 我怎麼能將所選名稱的唯一ID傳遞給支持bean,而用戶沒有看到它?可能嗎?我試圖弄清楚如何使用f:param,但我沒有看到這將如何工作。從f:selectItems傳遞參數到h:selectOneListbox

   <h:selectOneListbox id="listBox" value="#{ScheduleMB.clients}" size="5" 
       rendered="#{ScheduleMB.showClients}" > 
        <f:selectItems value="#{ScheduleMB.clientList}" var="c" 
         itemLabel="#{c.lastName} #{', '} #{c.firstName}" itemValue="#{c.lastName}" /> 
        <f:ajax event="click" listener="#{ScheduleMB.clickListener}" 
         render="group" /> 
       </h:selectOneListbox> 
+0

是否有任何理由,您沒有將值設置爲與名稱關聯的ID?或者你想讓ID不在頁面的任何位置(甚至隱藏在HTML源代碼中)? – Lipongo

+0

有可能姓氏+名字可能不是唯一的,所以我更喜歡id。我不希望看到身份證,因爲1)用戶可能會欺騙它2)我認爲這是不美觀的。因此,我想使用id,但我不確定使用jsf將其發回的最佳方式。 – Dave

回答

1

<f:param>服務於不同的目的。即使<f:param>是可能的,它仍然最終會在生成的HTML輸出中可見。最終用戶只需點擊右鍵並選擇查看源代碼,然後查看被定義爲選項值的ID。

最好的辦法是根據不同的唯一標識符從數據庫中檢索ID,也許是名字+姓氏的唯一組合。

它的方式沒有任何意義,我爲什麼想要從輸出中隱藏ID。如果您將它用作選項值,則會更容易,如果您使用了轉換器,則更加容易,因此您可以將整個#{c}作爲選項值傳遞。最終用戶無法以任何方式欺騙/更改它。 JSF將根據可用選項(無論如何在服務器端定義)重新驗證提交的值。

+0

感謝您的回覆。不幸的是,名字+姓氏可能不是唯一的,所以我想使用與每個客戶端關聯的數字ID,並且在#{c}對象中。不知道我完全理解你答案的最後部分 - 我仍然是一個jsf新手。傳遞整個#{c}對象會很好,但我該怎麼做並仍然顯示客戶端列表? – Dave

+0

你可以使用'Converter'來做到這一點。請參閱此答案的示例#2:http://stackoverflow.com/questions/6848970/how-to-prepopulate-a-hselectonemenu-from-a-db/6850681#6850681 – BalusC

+0

BalusC,似乎是它。謝謝。 – Dave