2013-01-01 25 views
5

Có vấn đề với việc chọn p:selectOneMenu khi thêm f:selectItem.p: selectOneMenu chọn trước mục trước khi noSelectionOption item có mặt

Xem:

<p:selectOneMenu value="#{selectionTest.selectedName}"> 
    <f:selectItem itemLabel="Select" noSelectionOption="true" /> 
    <f:selectItems value="#{selectionTest.allNames}" var="varName" itemLabel="#{varName}" itemValue="#{varName}" /> 
</p:selectOneMenu> 

mẫu:

private List<String> allNames; 
private String selectedName; 

public MenuSelectionTestBean(){ 
    allNames = new ArrayList<String>(); 
    allNames.add("Ahmed"); 
    allNames.add("Mohamed"); 
    allNames.add("Ibrahim"); 
    allNames.add("Walid"); 

    selectedName ="Walid"; 
} 

Kết quả:

enter image description here

Mục "Walid" nên được lựa chọn, tuy nhiên "Ibrahim" được chọn để thay thế. Tôi nghĩ rằng PrimeFaces chọn mục tùy thuộc vào chỉ số của nó trong danh sách chứ không phải giá trị của mục.

Điều này gây ra như thế nào và tôi có thể giải quyết nó như thế nào?

Trả lời

7

Tôi có thể tái tạo sự cố của bạn. Tôi đã xem mã nguồn của PrimeFaces. Đó là lỗi trong PrimeFaces SelectOneMenuRenderer chỉ hiển thị khi một mục có noSelectionOption="true" được sử dụng. Trình kết xuất sẽ không tạo phần tử HTML <option> của phần tử sao lưu <select> cho điều đó, nhưng nó sẽ tạo ra <li> của danh sách trực quan <ul> cho điều đó. Nói cách khác, các <select> chứa trong trường hợp của bạn 4 mục và <ul> 5 mục. Các <li> được chọn bởi JavaScript dựa trên các chỉ số của <option selected>, chính xác như bạn nghi ngờ. Điều đó giải thích vấn đề của bạn.

Đặt cược tốt nhất của bạn là report it as a bug cho PrimeFaces guys. Trình kết xuất cũng sẽ tạo ra các <option> cho điều đó hoặc JavaScript nên chọn tùy chọn dựa trên giá trị thay vì chỉ mục.

Trong khi đó, thay thế noSelectionOption="true" bởi itemValue="#{null}", hoặc cũng itemValue="" khi JSF được cấu hình để giải thích chuỗi rỗng giá trị nộp như null, nên giải quyết vấn đề của bạn.

+0

nó thực sự là một vấn đề http://code.google.com/p/primefaces/issues/detail?id=4178&colspec=ID%20Stars%20Type%20Status%20Priority%20TargetVersion%20Reporter%20Owner%20Summary&start=100 i tìm thấy nó sau khi đăng vấn đề này; cảm ơn –

+0

Bạn được chào đón. – BalusC