2013-07-19 25 views
5

Đây là SelectOneMenu tôiselectonemenu JSF trên các đối tượng với chuyển đổi

<h:selectOneMenu value="#{bean.myObject}" > 
    <f:ajax render="componentToRender" listener="#{bean.onSelect}"/> 
    <f:converter converterId="myObjectConverter" /> 
    <f:selectItem itemLabel="None" itemValue="#{null}" /> 
    <f:selectItems value="#{bean.objects}" var="object" itemValue="#{object}" itemLabel="#{object.name}" /> 
</h:selectOneMenu> 

Và chuyển đổi của tôi

@FacesConverter("myObjectConverter") 
public class MyObjectConverter implements Converter{ 

    private List<MyObject> objects; 

    public MyObjectConverter(){ 
     this.objects = MyController.getAllMyObjects(); 
    } 

    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     if(!StringUtils.isInteger(value)) { 
      return null; 
     } 
     return this.getMyObject(value); 
    } 

    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     if(value == null) { 
      return null; 
     } 
     return String.valueOf(((MyObject) value).getId()).toString(); 
    } 

    public MyObject getMyObject(String id) { 
     Iterator<MyObject > iterator = this.objects.iterator(); 
     while(iterator.hasNext()) { 
      MyObject object = iterator.next(); 

      if(object.getId() == Integer.valueOf(id).intValue()) { 
       return object; 
      } 
     } 
     return null; 
    } 

} 

Vấn đề là người biết lắng nghe ajax của tôi là không bao giờ gọi và thành phần của tôi không bao giờ trả lại. Có vấn đề gì với trình chuyển đổi của tôi hoặc selectOneMenu? Tôi làm theo một ví dụ và tôi không thể tìm ra sai lầm.

BTW: phương pháp đơn giản của tôi trong đậu

public void onSelect() { 
    System.out.println(this.myObject); 
    if(this.myObject != null) { 
     System.out.println(this.myObject.getName()); 
    } 
} 

Tôi đã có một vấn đề như thế này và tôi đã thay đổi giá trị được lựa chọn của tôi từ đối tượng để id. Nhưng ở đây tôi muốn làm cho nó hoạt động với các đối tượng bởi vì tôi biết nó có thể.

Cảm ơn

+0

Vui lòng thêm ' 'hoặc' 'và bao gồm ID của nó trong' 'là tốt. Cơ hội là lớn mà cuối cùng bạn sẽ nhận được thông báo lỗi chuyển đổi mong muốn phải đối mặt với tin nhắn. Hoặc, chỉ cần nhìn vào nhật ký máy chủ cho các thông báo khuôn mặt đã được enqueued nhưng chưa được hiển thị. Hoặc có lẽ thậm chí có một ngoại lệ cụ thể trong đó nên đã là toàn bộ câu trả lời riêng của nó, chẳng hạn như 'NullPointerException' chỉ ra một vấn đề logic Java khá tầm thường. – BalusC

+0

Tôi có thể thêm rằng nó đang nhập phương pháp nghe khi tôi chọn mục "không có" trong danh sách. –

+0

Có, bạn nói đúng, tôi có lỗi xác thực (giá trị không chính xác). Điều đó có nghĩa đó là công cụ chuyển đổi của tôi? Nó là một công cụ chuyển đổi rất đơn giản mà tôi nghĩ. –

Trả lời

7

Tôi có giải pháp. Tôi đã phải ghi đè lên phương thức "bằng" trong lớp MyObject!

Cảm ơn.

EDIT: mã

@Override 
public boolean equals(Object obj) { 
    if(this.id == ((MyObject) obj).id) { 
     return true; 
    }else { 
     return false; 
    } 
} 
Các vấn đề liên quan