2013-11-23 6 views
1

JSF로 몇 가지 문제를 해결하려고 노력하고 있지만 운이 없습니다. 나는 많은 코드가이 문제를 해결할 수 있다고 생각하지 않기 때문에 코드를 재개하려고 노력할 것이다. 그래서 나는 내 문제를 더 잘 설명하려고 노력할 것이다.selectItems를 주어진 문자열 위치로 설정하는 방법은 무엇입니까?

이제 matutinal, vespertine 및 nightly의 세 가지 교대를 저장하는 String이 있습니다. 제 건축에서 나는 이고, myStringArray[0] = 'matutinal', myStringArray[1] = 'vespertine'myStringArray[3] = 'nightly'이 필요합니다.

내 응용 프로그램에서 JSF 2.0 및 Primefaces를 사용하고 있습니다. 일부는 omnifaces입니다. I [0] matutinal 확인란을 선택하면, turnos을 turnos 선택할 수있는 방법 그래서

// 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 
*/ 

, 이런 일을 기준으로, : escolaMBean에서

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

참고 : 다음

내 JSF 코드 1 vespertine 확인란이 선택되어 있고 야간에 체크 박스를 선택하면 [2]가 표시됩니까? 이제 Nightly first를 선택하면 위치 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