我正在使用 PrimeFaces、JPA、Hibernate 和 JSF 2.0 开发一个 Web 应用程序。
我有两个实体Students
,并且Course
具有多对一的关系。
@Entity
@Table(name = "STUDENTS")
public class Students extends MainUsers implements Serializable {
private String firstName;
private String lastName;
private long mobile;
private String jobTitle;
private int duration;
@Temporal(TemporalType.TIMESTAMP)
private Date startDate;
@Temporal(TemporalType.TIMESTAMP)
private Date endDate;
@ManyToOne
@JoinColumn(name = "course_id", nullable = true)
private Course company;
// Getters and setters.
}
@Entity
@Table(name = "COURSE")
@NamedQueries({
@NamedQuery(name = "course.findCourseByCourseId", query = "select c from Course c where c.Id =:id"),
@NamedQuery(name = "course.findCourseByCourseName", query = "select c from Course c where c.courseName =:courseName") })
public class Course implements Serializable {
public static final String FIND_COURSE_BY_COURSE_ID = "course.findByCourseId";
public static final String FIND_COURSE_COURSE_NAME = "course.findByCourseName";
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int Id;
private String courseName;
@OneToMany(targetEntity = Students.class, mappedBy = "course", fetch = FetchType.LAZY)
private List<Students> students;
// Getters and setters.
@Override
public int hashCode() {
return getId();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Course) {
Course course = (Course) obj;
return course.getId() == Id;
}
return false;
}
}
我有一个注册页面,其中包含学生的姓名、电子邮件、密码和课程。为了选择我使用过的课程
<h:outputText value="Course :" />
<p:selectOneMenu value="#{courseMB.course}">
<f:selectItem itemLabel="Select one Course" itemValue="" />
<f:selectItems value="#{courseMB.allCourses}" var="crs"
itemLabel="#{crs.courseName}" itemValue="#{crs.id}" />
<f:converter converterId = "courseConverter"/>
</p:selectOneMenu>
要创建一个学生,我在 StudentMB 类中有以下方法:
public void createStudent() {
String test = student.getEmail();
if (getStudentFacade().isStudentExist(test)){
System.out.println(test);
} else {
try {
student.setActivation_key(hashKey());
student.setRole(Role.STUDENT);
student.setActive(0);
getStudentFacade().createStudent(student);
displayInfoMessageToUser("Created with success");
SendEmail.Send(username, password, student.getEmail(), title, linkToSend());
loadStudent();
resetStudent();
} catch (Exception e) {
displayErrorMessageToUser("Opps, we could not create the user. Try again");
e.printStackTrace();
}
}
}
我真的不知道如何将课程放入 StudentMB 并将其保存到数据库中。当前的方法给了我一个错误
'null Converter' 的转换错误设置值'courseID'。
我尝试使用转换器,但我在参数中输入了空字符串。
@FacesConverter(value="courseConverter", forClass = com.model.Course.class)
public class CourseConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
CourseFacade courseFacade = new CourseFacade();
int courseId;
try {
courseId = Integer.parseInt(submittedValue);
} catch (NumberFormatException exception) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Type the name of a Course and select it (or use the dropdown)",
"Type the name of a Course and select it (or use the dropdown)"));
}
return courseFacade.findCourse(courseId);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
Course course = null;
if (modelValue instanceof Course){
course = (Course) modelValue;
StringBuilder asString = new StringBuilder();
asString.append(course.getId()+"-");
asString.append(course.getCourseName());
return asString.toString();
}
return "";
}
}
这是如何引起的,我该如何解决?