Java 在Liferay MVC中制作积垢

Java 在Liferay MVC中制作积垢,java,model-view-controller,liferay,Java,Model View Controller,Liferay,我正在用java创建一个portlet。我已经建立了一个班级。我有一个数据库,我想进行CRUD操作。我只做了read和add方法。有人能帮我更新和删除吗?我不知道如何获得学生的id,所以我更新了记录,或者删除了它 @Entity @Table(name="STUDENT") public class Student extends base.persistence.Entity { private String firstName; private int age; private Date

我正在用java创建一个portlet。我已经建立了一个班级。我有一个数据库,我想进行CRUD操作。我只做了read和add方法。有人能帮我更新和删除吗?我不知道如何获得学生的id,所以我更新了记录,或者删除了它

@Entity
@Table(name="STUDENT")
public class Student extends base.persistence.Entity {

private String firstName;
private int age;
private Date birthDate;
private String gender;
private boolean isfreshman;

public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public Date getBirthDate() {
    return birthDate;
}
public void setBirthDate(Date birthDate) {
    this.birthDate = birthDate;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}


public boolean isIsfreshman() {
    return isfreshman;
}
public void setIsfreshman(boolean isfreshman) {
    this.isfreshman = isfreshman;
}
@Id
@Override
public Long getId() {
    return id;
}
@Override
public void setId(Long id) {
    this.id = id;

}
@Override
public Date getDateCreated() {
    return dateCreated;
}
@Override
public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
}
@Override
public Date getDateUpdated() {  
    return dateUpdated;
}
@Override
public void setDateUpdated(Date dateUpdated) {
    this.dateUpdated = dateUpdated;

}
@Override
public boolean isDeleted() {
    return deleted;
}
@Override
public void setDeleted(boolean deleted) {
    this.deleted= deleted;
}
}


}

对于如何传递正确的ID,您似乎缺少一些基本的理解。我的建议是使用构建这个portlet,包括实体。其中一个将使用servicebuilder,但会生成您当前正在自己实现的所有代码,包括前端portlet。您可以查看这段代码,调试并检查它。然后将您的发现转换到您在问题中提到的代码中-单步执行代码可能比任何描述某些机制的人都更有帮助。

我解决了我的问题。以下是我使用的所有方法,而不是使用ServiceBuilder

 public class StudentMVCPortlet extends MVCPortlet {

@Override
public void doView(RenderRequest renderRequest,
        RenderResponse renderResponse) throws IOException, PortletException {
    List<Student> students = EntityUtil.getAll(Student.class);
    renderRequest.setAttribute("students", students);
    include("/list.jsp", renderRequest, renderResponse);
    // super.doView(renderRequest, renderResponse);
}

@ProcessAction(name = "EditForm")
public void EditForm(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Long id = ParamUtil.getLong(actionRequest, "id");
    Student student = (Student) EntityUtil.getById(Student.class, id);
    actionRequest.setAttribute("student", student);
    actionResponse.setRenderParameter("mvcPath", "/edit.jsp");
}

@ProcessAction(name = "addStudent")
public void addStudent(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Student s = new Student();
    s.setFirstName(ParamUtil.getString(actionRequest, "firstName"));
    s.setAge(ParamUtil.getInteger(actionRequest, "age"));
    String gender = ParamUtil.getString(actionRequest, "gender");
    if (gender.equalsIgnoreCase("")) {
        gender = "null";
    }
    // s.setGender(ParamUtil.getString(actionRequest, "gender"));
    s.setGender(gender);
    s.setBirthDate(ParamUtil.getDate(actionRequest, "dateBirth",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    s.setDateCreated(ParamUtil.getDate(actionRequest, "dateCreated",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    s.setDateUpdated(ParamUtil.getDate(actionRequest, "dateUpdated",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    s.setIsfreshman(ParamUtil.getBoolean(actionRequest, "isfreshman"));
    s.setDeleted(false);
    EntityUtil.save(s);
}

@ProcessAction(name = "updateStudent")
public void updateStudent(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Long id = ParamUtil.getLong(actionRequest, "id");
    Student dbStudent = (Student) EntityUtil.getById(Student.class, id);

    dbStudent.setFirstName(ParamUtil.getString(actionRequest, "firstName"));
    dbStudent.setAge(ParamUtil.getInteger(actionRequest, "age"));
    dbStudent.setGender(ParamUtil.getString(actionRequest, "gender"));
    dbStudent.setBirthDate(ParamUtil.getDate(actionRequest, "birthDate",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    dbStudent.setDateCreated(ParamUtil.getDate(actionRequest,
            "dateCreated", DateFormatter.getMinusDelimeterYMDdateFormat()));
    dbStudent.setDateUpdated(ParamUtil.getDate(actionRequest,
            "dateUpdated", DateFormatter.getMinusDelimeterYMDdateFormat()));
    dbStudent.setIsfreshman(ParamUtil.getBoolean(actionRequest,
            "isfreshman"));

    boolean save = EntityUtil.save(dbStudent);
    if (!save) {
        actionRequest.setAttribute("student", dbStudent);
        actionResponse.setRenderParameter("mvcPath", "/edit.jsp");
    }

}

@ProcessAction(name = "deleteStudent")
public void deleteStudent(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Long id = ParamUtil.getLong(actionRequest, "id");
    Student dbStudent = (Student) EntityUtil.getById(Student.class, id);
    EntityUtil.trash(dbStudent);

}

你在用服务生成器吗?不,我没有用。我正在使用Hibernate您需要创建Hibernate DAO来与数据库进行事务处理。如果您使用的数据库与liferay相同,我建议您使用service builder。它将为您创建模型和服务。我使用另一个数据库,必须使用hibernate。堆栈跟踪显示了什么?
 public class StudentMVCPortlet extends MVCPortlet {

@Override
public void doView(RenderRequest renderRequest,
        RenderResponse renderResponse) throws IOException, PortletException {
    List<Student> students = EntityUtil.getAll(Student.class);
    renderRequest.setAttribute("students", students);
    include("/list.jsp", renderRequest, renderResponse);
    // super.doView(renderRequest, renderResponse);
}

@ProcessAction(name = "EditForm")
public void EditForm(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Long id = ParamUtil.getLong(actionRequest, "id");
    Student student = (Student) EntityUtil.getById(Student.class, id);
    actionRequest.setAttribute("student", student);
    actionResponse.setRenderParameter("mvcPath", "/edit.jsp");
}

@ProcessAction(name = "addStudent")
public void addStudent(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Student s = new Student();
    s.setFirstName(ParamUtil.getString(actionRequest, "firstName"));
    s.setAge(ParamUtil.getInteger(actionRequest, "age"));
    String gender = ParamUtil.getString(actionRequest, "gender");
    if (gender.equalsIgnoreCase("")) {
        gender = "null";
    }
    // s.setGender(ParamUtil.getString(actionRequest, "gender"));
    s.setGender(gender);
    s.setBirthDate(ParamUtil.getDate(actionRequest, "dateBirth",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    s.setDateCreated(ParamUtil.getDate(actionRequest, "dateCreated",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    s.setDateUpdated(ParamUtil.getDate(actionRequest, "dateUpdated",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    s.setIsfreshman(ParamUtil.getBoolean(actionRequest, "isfreshman"));
    s.setDeleted(false);
    EntityUtil.save(s);
}

@ProcessAction(name = "updateStudent")
public void updateStudent(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Long id = ParamUtil.getLong(actionRequest, "id");
    Student dbStudent = (Student) EntityUtil.getById(Student.class, id);

    dbStudent.setFirstName(ParamUtil.getString(actionRequest, "firstName"));
    dbStudent.setAge(ParamUtil.getInteger(actionRequest, "age"));
    dbStudent.setGender(ParamUtil.getString(actionRequest, "gender"));
    dbStudent.setBirthDate(ParamUtil.getDate(actionRequest, "birthDate",
            DateFormatter.getMinusDelimeterYMDdateFormat()));
    dbStudent.setDateCreated(ParamUtil.getDate(actionRequest,
            "dateCreated", DateFormatter.getMinusDelimeterYMDdateFormat()));
    dbStudent.setDateUpdated(ParamUtil.getDate(actionRequest,
            "dateUpdated", DateFormatter.getMinusDelimeterYMDdateFormat()));
    dbStudent.setIsfreshman(ParamUtil.getBoolean(actionRequest,
            "isfreshman"));

    boolean save = EntityUtil.save(dbStudent);
    if (!save) {
        actionRequest.setAttribute("student", dbStudent);
        actionResponse.setRenderParameter("mvcPath", "/edit.jsp");
    }

}

@ProcessAction(name = "deleteStudent")
public void deleteStudent(ActionRequest actionRequest,
        ActionResponse actionResponse) throws IOException, PortletException {
    Long id = ParamUtil.getLong(actionRequest, "id");
    Student dbStudent = (Student) EntityUtil.getById(Student.class, id);
    EntityUtil.trash(dbStudent);

}