【问题标题】:Making CRUD in Liferay MVC在 Liferay MVC 中制作 CRUD
【发布时间】:2014-11-27 18:51:51
【问题描述】:

我正在用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;
}

}

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);
}

/*@Override
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
    PortletPreferences preferences = actionRequest.getPreferences();
    ThemeDisplay themeDisplay =
            (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
    Student student = new Student();
    student.setId(EntityUtil.generateNewId());

    SessionMessages.add(actionRequest,"success");

    super.processAction(actionRequest, actionResponse);
}*/

@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"));
    s.setGender(ParamUtil.getString(actionRequest, "gender"));
    s.setBirthDate(ParamUtil.getDate(actionRequest,"dateBirth",      DateFormatter.getSlashDelimeterDMYdateFormat()));
      s.setDateCreated(ParamUtil.getDate(actionRequest,"dateCreated",DateFormatter.getSlashDelimeterDMYdateFormat()));
    s.setDateUpdated(ParamUtil.getDate(actionRequest,"dateUpdated",DateFormatter.getSlashDelimeterDMYdateFormat()));
    s.setIsfreshman(ParamUtil.getBoolean(actionRequest, "isfreshman"));
    s.setDeleted(false);
    EntityUtil.save(s);
}
@ProcessAction(name="getStudent")
public void getStudent(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
     Student student = (Student) EntityUtil.getById(Student.class,(Long) renderRequest.getAttribute("id"));
    renderRequest.setAttribute("student", student);
    include("/edit.jsp", renderRequest, renderResponse);
    //super.doView(renderRequest, renderResponse);
}


@ProcessAction(name="updateStudent")
public void updateStudent(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException{
    Student student = (Student) EntityUtil.getById(Student.class, (Long) actionRequest.getAttribute("id"));
    student.setFirstName(ParamUtil.getString(actionRequest, "firstName"));
    student.setAge(ParamUtil.getInteger(actionRequest, "age"));
    student.setGender(ParamUtil.getString(actionRequest, "gender"));
    student.setBirthDate(ParamUtil.getDate(actionRequest,"dateBirth", DateFormatter.getSlashDelimeterDMYdateFormat()));
    student.setDateCreated(ParamUtil.getDate(actionRequest,"dateCreated",DateFormatter.getSlashDelimeterDMYdateFormat()));
    student.setDateUpdated(ParamUtil.getDate(actionRequest,"dateUpdated",DateFormatter.getSlashDelimeterDMYdateFormat()));
    student.setIsfreshman(ParamUtil.getBoolean(actionRequest, "isfreshman"));
    student.setDeleted(false);
    EntityUtil.save(student);

}

}

【问题讨论】:

  • 你在使用服务构建器吗?
  • 不,我没有使用它。我正在使用休眠
  • 你需要创建你的 Hibernate DAO 来与你的数据库进行交易。如果您使用与 liferay 相同的数据库,我建议您使用服务构建器。它将为您创建模型和服务。
  • 我正在使用另一个数据库,我必须使用休眠。
  • 你的堆栈跟踪显示了什么?

标签: java model-view-controller liferay


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我解决了我的问题。这是我使用的所有方法,没有使用服务生成器。

     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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 2018-12-09
      • 1970-01-01
      • 2011-10-28
      • 2016-12-16
      • 2016-07-18
      • 1970-01-01
      • 2016-08-24
      • 2019-12-22
      相关资源
      最近更新 更多