2014-11-25 56 views
2

我正在检索数据库值并将它们放入数组列表(al)中。此数组列表以表格形式显示在JSP页面中。我想修改JSP页面中的值并使用Struts2更新数据库中的新值。我怎么做?从jsp中检索更新的数组列表struts2中的动作类

主要动作类

public class HelloWorldAction extends ActionSupport implements SessionAware{ 
ProjectDb pd; 
public ProjectDb getPd() { 
    return pd; 
} 

public void setPd(ProjectDb pd) { 
    this.pd = pd; 
} 
ArrayList<ProjectDb> al=new ArrayList<ProjectDb>(); 
public ArrayList<ProjectDb> getAl() { 

    return al; 
} 

public String status() throws Exception{ 
    boolean flag=false; 


    try{ 
     Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 

     Connection conn = DriverManager 
       .getConnection("jdbc:ucanaccess://D:\\Db1.mdb"); 

     username=(String) map.get("user"); 
     PreparedStatement ps=conn.prepareStatement( 
       "SELECT * FROM StaleInGers WHERE (((StaleInGers.mailId)=(Select email from DBA where username='"+username+"' and email='"+email+"')))"); 
     //ps.setString(1,username); 
     //ps.setString(2,password); 

     ResultSet rs=ps.executeQuery(); 

     al=new ArrayList<ProjectDb>(); 
     while(rs.next()){ 
      pd =new ProjectDb(); 
      pd.setProject(rs.getString("project")); 
      pd.setStatus(rs.getString("status")); 
      pd.setComments(rs.getString("comments")); 

      al.add(pd); 


      flag=true; 
     } 


    } catch (Exception e) { 
     System.out.println("Exception : " +e); 
    } 
    if(flag==true){ 
     return "success"; 
    } 
    else{ 
     return "error"; 
    }  
    } 
} 

这是POJO类

public class ProjectDb { 
private String project,status,comments,email; 

public String getEmail() { 
return email; 
} 

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

public String getProject() { 
return project; 
} 

public void setProject(String project) { 
this.project = project; 
} 

public String getStatus() { 
return status; 
} 

public void setStatus(String status) { 
this.status = status; 
} 

public String getComments() { 
return comments; 
} 

public void setComments(String comments) { 
this.comments = comments; 
} 
} 

这是JSP页面,在这里我显示数组列表

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4 
/loose.dtd"> 
<html> 
<head> 
<style type="text/css"> 
table,td,th { 
border: 1px solid green; 
width:100%; 
} 

th { 
background-color: green; 
color: white; 
} 
</style> 
</head> 
<body> 
<form action="update"> 
<table > 
<tr> 
<th>Project</th> 
<th>Status</th> 
<th>Comments</th> 
</tr> 
<s:iterator value="al" id="array" status="alStatus"> 
<tr> 
<td><s:property value="%{project}"/></td> 
<td><s:textfield name="array[%{#alStatus.index}].status" value="%{status}" theme="simple" 
/></td> 
<td><s:textfield name="array[%{#alStatus.index}].comments" value="%{comments}" theme="simple" 
/></td> 
    </tr> 
    </s:iterator> 
    </table><br><br> 
    <input style="opacity: 0.7; border-radius: 5px; border: 0; width: 250px; 
     height:35px;   
     font-family: Goudy Old Style; font-size: 22px; background: #00CC80;" 
     type="submit" value="Submit"> 
    </form>    
    </body> 
    </html> 
+0

你可以用很多方式做到这一点,你有一个具体的问题吗? – 2014-11-25 10:42:46

回答

1

第一个自带的一点是制作输入类型的表格字段,并将来自ArrayList的值放在每个输入值参数中。在这之后创建一个更新方法(比如satus()),并且使用pojo的setter更新触发表单动作的更新方法的输入值。

它应该是这个样子:

更新方法HelloWorldAction:

public void update(ProjectDB prjDb) throws Exception{ 
boolean flag=false; 
PreparedStatement ps = null; 


try{ 
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 

    Connection conn = DriverManager 
      .getConnection("jdbc:ucanaccess://D:\\Db1.mdb"); 

    conn.setAutoCommit(false); 
    username=(String) map.get("user"); 
    /*Selecting which field would be updated */ 
    if(!"".equals(prjDb.getEmail().trim())){ 
    ps=conn.prepareStatement( 
      "UPDATE StaleInGers SET email=? WHERE (((StaleInGers.mailId)=(Select email from DBA where username='"+username+"' and email='"+email+"')))"); 
    ps.setString(1,prjDb.getEmail()); 
    } 
    //else if(...){...} --> Treat all the cases, if email is not empty, and another field is not empty, if only one field is not empty, etc.. 


    int i = ps.executeUpdate(); 
    conn.commit(); 




     if(i>0){ flag=true; } 
    } 


} catch (Exception e) { 
    System.out.println("Exception : " +e); 
} 
if(flag==true){ 
    return "success"; 
} 
else{ 
    return "error"; 
}  
} 
//Don't forget to close the connection and prepared statement 

字段必须从你进入这个页面(也可以使更新行动的阵列来填充),就像你在JSP中做的那样。这是更新方法的Demo示例,但它应该可以工作,我让你自己编写剩下的代码。

+0

请您详细说明一下吗?我是Java新手,但是,我尝试使用getters和setters检索值,但是我什么也没有得到。 – sushi 2014-11-26 06:51:34

+0

查看本教程以获取更多详细信息:http://www.java4s。 com/struts-tutorials/struts2-insertupdatedeleteoperations-through-jdbc-real-time-application/ – drgPP 2014-11-26 07:40:50

0
  1. 使用var代替id(即不建议使用)在迭代器;在你的情况下,它甚至不需要BTW。

  2. 确保在您的目标操作(update)中有一个名为arrayList<ProjectDb>(使用接口列表,不是实现ArrayList),并带有getter/setter;

  3. 使用<input type="hidden" />发送您与<s:property />表示值:

    <td> 
        <s:hidden name="array[%{#alStatus.index}].project" value="%{project}" /> 
        <s:property value="%{project}" /> 
    </td> 
    
+0

请您详细说明我应该在操作类中做些什么?我确实尝试了你的建议,但我没有从jsp获得任何值。 – sushi 2014-11-26 06:52:51

+0

'name'属性用于映射目标操作中的目标属性。如果你写'name =“foo [0] .project”',你需要在'update'动作中(由你的表单定位)'private List foo;'。如果你写'name =“foo.project”',你需要'private ProjectDb foo;'。如果你编写'array [%{#alStatus.index}] .project',你需要'私人列表数组;'。不要忘记二传手;) – 2014-11-26 09:29:48

+0

尼斯头像,卡尔文&霍布斯FTW 8) – 2014-11-26 09:40:47

0

以前我需要通过JavaScript的阵列,以操作类支柱2的,我试图使用JSON,var arr1=["1", "2", "3"],

$.getJSON('ajaxSaveDetails', { 
      javaArray : JSON.stringify(arr1) 
      }.fail(function(){ 
       $(".error-txt").text("Error occured"); 
    }); 

在Action类,我书面​​和方法

jsonArray = (JSONArray)new JSONParser().parse(javaArray); 

我得到了正确的数组。

相关问题