2013-11-23 38 views
1

我試圖用JSF解決一些問題,但我沒有運氣。我將嘗試恢復我的代碼,因爲我認爲這裏沒有很多代碼可以幫助您解決此問題,所以我會盡力描述更好的問題。如何將selectItems設置爲給定的字符串位置?

現在我有一個存儲三班倒的字符串:matutinal,vespertine和nightly。在我的架構中,我需要需要myStringArray[0] = 'matutinal',myStringArray[1] = 'vespertine'myStringArray[3] = 'nightly'

我在我的應用程序中使用JSF 2.0和Primefaces - 也有一些omnifaces

以下是我的JSF代碼:

<p:selectManyCheckbox value="#{escolaMBean.turnos}"> 
    <f:selectItems value="#{escolaMBean.listaTodosTurnos}" var="turno" itemValue="#{turno.nome}" itemLabel="#{turno.nome}" />          
</p:selectManyCheckbox> 

注意在escolaMBean:

// Stores the selected "Turnos" (This means "shift" in English) 
String[] turnos = new String[3]; 

// Stores all the "Turnos" received from DB 
ArrayList<Turno> listaTodosTurnos = <myControl.myDbRequest()> 

/* 
* Turno have a simple ID and Name, in DB we have 3 "Turnos": Matutinal, Vespertine, Nightly 
* In this MBean I have all getters and setters - and in "Turno" class too. 
* When I set one string in turnos[n], this set the right value 
*/ 

因此,基於這些事,我怎麼能選擇turnos [0]如果選擇黎明覆選框,turnos 1如果選擇了vespertine複選框,並且如果選擇夜間複選框,則回車[2]?現在這不起作用,因爲如果我首先選擇Nightly,那麼position turnos [0]將等於「nigthly」。

我怎樣才能解決這個問題呢?

回答

1

你想要什麼是標準的JSF手段是不可能的。你受到HTML工作方式的限制。 HTML <input type="checkbox">僅提交有關選定值的信息,而不提供有關未選定值的信息。 JSF僅僅是HTML/HTTP和Javabean模型之間的信使。所有JSF檢索都是選定值的集合。它不檢索未選定值的集合。

您需要根據所選值自己將可用值中的未選定值相交。

這裏有一個開球例如,假設提交表單後,你已經一個

private List<String> selectedItems; // <p:selectManyCheckbox value> 
private List<Item> availableItems; // <f:selectItems value> 
private String[] orderedSelectedItems; // Selected items ordered by index 

那麼這應該做的,例如在發生的動作監聽:

orderedSelectedItems = new String[availableItems.size()]; 
int i = 0; 

for (Item item : availableItems) { 
    String name = item.getName(); 
    orderedSelectedItems[i++] = selectedItems.contains(name) ? name : null; 
} 
+0

再次感謝BalusC。我做了一些改編,但是這有效! – Paladini

+0

不客氣。 – BalusC

相關問題