2016-11-19 12 views
0

私はこのリンクhttp://www.tutorials4u.net/struts2-tutorial/struts2_crud_example.htmlを使用してレコードを更新しようとしていますが、更新する代わりに新しいレコードを挿入しています。私はすでにから多くのことをしようとしたとして、それらのどれも私のために働いていないが、この記事では私はAddStudentAction.javaHIbernate saveorUpdate()更新中に新しいレコードを挿入

...質問と回答を掲載、重複としてそれをマークする前に、私の質問を読むために

を要求していてください。

public class AddStudentAction extends ActionSupport implements ModelDriven<Student> { public AddStudentAction() { // TODO Auto-generated constructor stub } Student student = new Student(); private String firstName; private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstNameSearch(String firstName) { this.firstName = firstName; } List<Student> students = new ArrayList<Student>(); List<Student> studentFirstNames = new ArrayList<Student>(); public List<Student> getStudentFirstNames() { return studentFirstNames; } public void setStudentFirstNames(List<Student> studentFirstNames) { this.studentFirstNames = studentFirstNames; } StudentDAO dao = new StudentDAO(); public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } public StudentDAO getDao() { return dao; } public void setDao(StudentDAO dao) { this.dao = dao; } @Override public Student getModel() { // TODO Auto-generated method stub return student; } @Override public String execute() { // TODO Auto-generated method stub dao.addStudent(student); String f = student.getFirstName(); String l = student.getLastName(); int m = student.getMarks(); System.out.println(f + l + m + "Inside execute method"); return "success"; } public String updateStudent() { dao.addStudent(student); return "success"; } public String listStudents() { students = dao.getStudents(); return "success"; } public String editStudent() { HttpServletRequest request = (HttpServletRequest) ActionContext .getContext().get(ServletActionContext.HTTP_REQUEST); student = dao.listStudentById(Integer.parseInt((request .getParameter("id")))); student.setId(Integer.parseInt((request.getParameter("id")))); System.out.println(request.getParameter("id") + "id in editStudent"); dao.updateStudent(student); return SUCCESS; } 

StudentDAO.java

public class StudentDAO { 
@SessionTarget 
Session session; 

@TransactionTarget 
Transaction transaction; 
public void addStudent(Student student) { 
    try { 
     session.saveOrUpdate(student); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void updateStudent(Student student) { 
    try { 

     session.saveOrUpdate(student); 
     session.flush(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
public Student listStudentById(int Id) { 
    Student student = null; 
    try { 
     student = (Student) session.get(Student.class, Id); 
    } catch (Exception e) { 

    } 
    return student; 
} 

}

Student.java

package com.struts2hibernatepagination.hibernate; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "student") 
public class Student { 

    @Id 
    @GeneratedValue 
    @Column(name = "id") 
    private int id; 
    @Column(name = "last_name") 
    private String lastName; 
    @Column(name = "first_name") 
    private String firstName; 
    private int marks; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    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 int getMarks() { 
     return marks; 
    } 

    public void setMarks(int marks) { 
     this.marks = marks; 
    } 

} 

struts.xml

<?xml version="1.0" encoding="UTF-8"?> 

<package name="default" extends="hibernate-default"> 
<action name="addStudent" method="execute" 
     class="com.struts2hibernatepagination.action.AddStudentAction"> 
     <interceptor-ref name="defaultStackHibernateStrutsValidation"> 
      <param name="validation.excludeMethods">listStudents</param> 
      <param name="validation.excludeMethods">fetchStudentList</param> 
     </interceptor-ref> 
     <result name="success" type="redirect"> 
      listStudents 
     </result> 
     <result name="input">/student.jsp</result> 
    </action> 
<action name="editStudent" 
     class="com.struts2hibernatepagination.action.AddStudentAction" 
     method="editStudent"> 
     <interceptor-ref name="basicStackHibernate" /> 
     <result name="success">/student.jsp</result> 
    </action> 
</package> 

hibernate.cfg.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">admin12345</property> 
     <property name="hibernate.connection.url">jdbc:mysql://192.168.1.3:3306/nupur</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <property name="hibernate.hbm2ddl.auto">update</property> 
     <mapping class="com.struts2hibernatepagination.hibernate.Student" /> 
    </session-factory> 
</hibernate-configuration> 

student.jsp

<%@ page contentType="text/html; charset=UTF-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 

<html> 
<head> 
<title>Hello World</title> 
<s:head /> 
</head> 
<body> 
    <a href="searchStudent.jsp">Search</a> 
    <s:form action="addStudent"> 
     <s:actionerror /> 
     <s:textfield name="firstName" label="First Name" /> 
     <s:textfield name="lastName" label="Last Name" /> 
     <s:textfield name="marks" label="Marks" /> 
     <s:submit value="Save" /> 
     <hr /> 
     <table border="2"> 
      <tr bgcolor="cyan"> 
       <th><u>First Name</u></th> 
       <th><u>Last Name</u></th> 
       <th><u>Marks</u></th> 
       <th><u>Edit</u></th> 
       <th><u>Delete</u></th> 
      </tr> 
      <s:iterator value="students"> 
       <tr> 
        <td><s:property value="firstName" /></td> 
        <td><s:property value="lastName" /></td> 
        <td><s:property value="marks" /></td> 
        <td><s:url id="editURL" action="editStudent"> 
          <s:param name="id" value="%{id}"></s:param> 
         </s:url> <s:a href="%{editURL}">Edit</s:a></td> 
        <td><s:url id="deleteURL" action="deleteStudent"> 
          <s:param name="id" value="%{id}"></s:param> 
         </s:url> <s:a href="%{deleteURL}">Delete</s:a></td> 
       </tr> 
      </s:iterator> 
     </table> 

    </s:form> 

    <s:form action="fetchStudentList"> 
     <s:submit value="Show"></s:submit> 

    </s:form> 


</body> 
</html> 
それは@GeneratedValue注釈をsession.flush()を使用するか、削除するのであるかどうか、私はすべての方法を試してみましたとおり0

は...私を助けてください

IdがaddStudent()

public String editStudent() { 
HttpServletRequest request = (HttpServletRequest) ActionContext 
         .getContext().get(ServletActionContext.HTTP_REQUEST); 
       dao.listStudentById(Integer.parseInt((request.getParameter("id"))));    return SUCCESS; 
      } //AddStudetnAction class method 

                     public void addStudent(Student student) { 
       try { 
       System.out.println(student.getId() + "In DAO addStudent");// returning null 
       session.saveOrUpdate(student); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

    //StudentDAO class method                      

ザ・に来ていませんStudentDAOaddStudent()は、あなたがアップしたい場合は、それは

答えて

1

ほぼ2〜3日を過ごした後、私は、私は <s:hidden name="id" />としてIDを渡していたところから、私のJSPで<s:hidden>タグを述べ、解決策を得ましたHibernateを更新するにはidを取得し、失敗した場合はsaveメソッドを呼び出します。

0

保存の代わりにupdateメソッドを呼び出すように私はaddStudent()のIDを設定することができますどのように、idためnull値を取得していますあなたがIDを持っている必要がある日付レコード、SaveOrUpdateはIDがテーブルにあればそれを検索し、それが更新されていなければ新しいレコードを追加します。

私はあなたの生徒をどのように作成するのか分かりませんが、更新したい場合はIDを持つようにオブジェクトをデータベースから取得する必要があります(またはIDを知っていればそれだけです)。オブジェクトは永続コンテキストにあり、フラッシュします。

0

これは私の編集方法です。

StudentActionJavaの

public String edit() 
{ 
    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); 
    student = studentDAO.listStudentsById(Long.parseLong(request.getParameter("id"))); 

    return SUCCESS; 
} 

StudentList.jsp

<s:url id="editURL" action="edit"> 
         <s:param name="id" value="%{id}"></s:param> 
        </s:url> 
        <s:a href="%{editURL}">Edit</s:a> 
0

s:formタグでは、URLのパラメータは使用できませんが、hidden入力フィールドを使用できます。 s:formタグのデフォルト値はPOSTです。

<s:form action="addStudent"> 
    <s:actionerror /> 
    <s:textfield name="firstName" label="First Name" /> 
    <s:textfield name="lastName" label="Last Name" /> 
    <s:textfield name="marks" label="Marks" /> 
    <s:hidden name="id"/> 
    <s:submit value="Save" /> 
    ... 
</s:form> 
+0

ありがとうございました。私は同じ変更を行い、以前の回答として投稿しました。 – Nupur

関連する問題