Using POJO's with SelectOneMenu with Generic Converter

前端 未结 2 1553
我寻月下人不归
我寻月下人不归 2021-01-03 06:28

Hello How to use List of POJO\'s with JSF h:selectOneMenu or Primefaces p:selectOneMenu?
I know that there are lot of related questions which s

2条回答
  •  独厮守ぢ
    2021-01-03 07:05

    here is a complete example of using a POJO with Primefaces p:selectOneMenu.the primfaces select one menu display a list of students.If you press details button after select any student, a primfaces dialog will appear with the full name of this student.

    com.model package:

    Student class

    package com.model;
    
    import java.io.Serializable;
    
    public class Student implements Serializable{
    
    
    private static final long serialVersionUID = 1L;
    
    private int Id;
    
    
    public int getId() {
        return Id;
    }
    public void setId(int id) {
        Id = id;
    }
    
    private String lastName;
    private String firstName;
    
    
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    
    public Student() {
        super();
        }
    
        public Student(String lastName, String firstName,int Id) {
        super();
        this.lastName = lastName;
        this.firstName = firstName;
        this.Id = Id;
    
    
      }}
    

    The converter

       package com.model;
    
     import java.util.ArrayList;
     import java.util.List;
    
     import javax.faces.application.FacesMessage;
     import javax.faces.component.UIComponent;
     import javax.faces.context.FacesContext;
     import javax.faces.convert.Converter;
     import javax.faces.convert.ConverterException;
     import javax.faces.convert.FacesConverter;
    
      @FacesConverter(forClass = com.model.Student.class,value="student")
       public class StudentConverter implements Converter{
     public static List studentDB;
    
        static {
            studentDB = new ArrayList();
            studentDB.add(new Student("William", "Wong", 1));
            studentDB.add(new Student("John", "Smith", 2));
            studentDB.add(new Student("Mari", "Beckley", 3));
            studentDB.add(new Student("Messi", "Leonardo",4));
            studentDB.add(new Student("William", "Astrid", 5));
            studentDB.add(new Student("William", "Banana", 6));
    
            }
    
        public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
            if (submittedValue.trim().equals("")) {
                return null;
            } else {
                try {
                    int number = Integer.parseInt(submittedValue);
    
                    for (Student s : studentDB) {
                        if (s.getId() == number) {
                            return s;
                        }
                    }
    
                } catch(NumberFormatException exception) {
                    throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid player"));
                }
            }
    
            return null;
        }
    
        public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
            if (value == null || value.equals("")) {
                return "";
            } else {
                return String.valueOf(((Student) value).getId());
            }
        }
    }
    

    com.managedbean package

       package com.managedbean;
    
       import java.util.List;
       import javax.annotation.PostConstruct;
       import javax.faces.bean.ManagedBean;
       import javax.faces.bean.ViewScoped;
       import com.model.Student;
       import com.model.StudentConverter;
    
     @ManagedBean
     @ViewScoped
        public class StudentMB {
        private Student  selectedStudent;
        public Student getSelectedStudent() {
        return selectedStudent;
    }
    
    
    public void setSelectedStudent(Student selectedStudent) {
        this.selectedStudent = selectedStudent;
    }
    
    
    public List getStudents() {
        return students;
    }
    
    
    public void setStudents(List students) {
        this.students = students;
    }
    
    
    private List students;
    
    
    @PostConstruct
    public void init(){
        students=StudentConverter.studentDB;
    }
    
     }
    

    selectMenu.xhtml

    
     
      
     
     
      
       
       
           
              
              
         
          
          
    
     
       
      
      
      
      
    
    
    
    
    

    get the source code

    you can download the complete example built using eclipse and deployed to glassfish from here

提交回复
热议问题