2014-11-25 23 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); 

我得到了正確的數組。

相關問題