Search code examples
javajspstruts2jsp-tags

How to fetch data from dynamically generated JSP page in Struts 2?


I am generating below page using Struts2. It is generating properly.

My question is how fetch the value from generated page when I click on delete button so I can further process for delete data from database and regenerate page with remaining data?

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
 <%@ taglib uri="/struts-tags" prefix="s" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>All Records:</h3>
        <table>  
        <s:form action="upload"> 
        <s:iterator   value="list"> 
        <tr>
        <td ><s:property value="id"/></td> 
        <td ><s:property value="name"/></td>  
        <td><s:property value="password"/></td>  
        <td><s:property value="email"/></td> 
        <td><s:property  value="gender"/></td>
        <td><s:checkbox  name="checked" label="isChecked"  theme="simple" /></td>       
        </tr>    
        </s:iterator> 
        <s:submit value="delete" name="delete" />
        </s:form>
        </table>
</body>
</html>

RegisterAction.java

package com.javatpoint;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class RegisterAction {
private String name,password,email,gender,country;
int id;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

ArrayList<User> list=new ArrayList<User>();  

public ArrayList<User> getList() {  
    return list;  
}  
public void setList(ArrayList<User> list) {  
    this.list = list;  
}  

public String execute(){
    int i=RegisterDao.save(this);
    if(i>0){
        Connection con=RegisterDao.con;
        try {
             PreparedStatement ps=con.prepareStatement("select * from STRUTSUSER");
             ResultSet rs=ps.executeQuery();  
        //  rs = ps.getGeneratedKeys();
              while(rs.next()){  
               User user=new User();  
               user.setId(rs.getInt(1));

               user.setName(rs.getString(1));  
               user.setPassword(rs.getString(2));  
               user.setEmail(rs.getString(3)); 
               user.setGender(rs.getString(4));
               list.add(user);  
              // System.out.println("yo");
              }  

              con.close();  
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
    return "success";
    }
    return "error";
}

Solution

  • you can try something as below:

      public class RegisterAction {
       ....
        public String execute(){
        ...
        }
    
        public List<User> getAllUsers() {
        List<User> users = new ArrayList<User>();
        Connection con=RegisterDao.con;
        try
        {
            Statement statement = conn.createStatement();
            ResultSet rs = statement.executeQuery("select * from STRUTSUSER");
            while (rs.next())
            {
                User user = new User();
                user.setID(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("pass"));
                user.setEmailID(rs.getString("emailid"));
                users.add(user);
            }
        } 
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return users;
       }
    
        public String delete() {
          HttpServletRequest request ServletActionContext.getRequest();
          int userId = request.getParameter("id");
          deleteUser(userId);
          return SUCCESS;
         }
    
        private void deleteUser(int userId)
            {
                Connection con=RegisterDao.con;
                try
                {
                   PreparedStatement ps = conn.prepareStatement("delete from STRUTSUSER where id=?");
                    // Parameters start with 1
                    ps.setInt(1, userId);
                    ps.executeUpdate();
    
                } catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
         }
    

    JSP page : view.jsp

      <s:iterator value="list">
       ...
     </s:iterator>
     <s:hidden name="id" value="%{#list.id}" />
     <s:submit value="delete" name ="delete" action="deleteUserAction"/>
    

    In Struts.xml

     <action name="deleteUserAction" class="example.RegisterAction" method="delete">
           <result name="success">view.jsp</result>
     </action>
    

    After deleting user, you can call getAllUsers() from action

    Hope this Helps