Java 在struts2中从jsp检索更新的数组列表到action类
我正在检索数据库值并将它们放入数组列表(al)中。此数组列表以表的形式显示在JSP页面中。我想修改JSP页面中的值,并使用Struts2更新数据库中的新值。我该怎么做 主要动作类Java 在struts2中从jsp检索更新的数组列表到action类,java,arrays,jsp,struts2,Java,Arrays,Jsp,Struts2,我正在检索数据库值并将它们放入数组列表(al)中。此数组列表以表的形式显示在JSP页面中。我想修改JSP页面中的值,并使用Struts2更新数据库中的新值。我该怎么做 主要动作类 public class HelloWorldAction extends ActionSupport implements SessionAware{ ProjectDb pd; public ProjectDb getPd() { return pd; } public void setPd(Projec
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";
}
}
}
这是显示数组列表的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>
表,td,th{
边框:1px纯绿色;
宽度:100%;
}
th{
背景颜色:绿色;
颜色:白色;
}
项目
地位
评论
首先想到的是创建输入类型的表字段,并将来自ArrayList的值放在每个输入值参数上。在此之后,创建一个更新方法(如satus()one),并使用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中一样,从进入此页面(在那里可以进行更新)的操作上的数组填充字段。这是update方法的演示示例,但它应该可以工作,我让您自己编写其余的代码
var
而不是id
(已弃用);在你的情况下,它甚至不需要顺便说一句update
)中有一个名为array
、带有getter/setter的列表(使用接口列表,而不是实现数组列表)
发送您用
显示的值:
之前,我需要将javascript数组传递给struts 2的action类,我尝试使用json,
var arr1=[“1”、“2”、“3”],
in
$.getJSON('ajaxSaveDetails', {
javaArray : JSON.stringify(arr1)
}.fail(function(){
$(".error-txt").text("Error occured");
});
在Action类中,我编写了私有字符串javaArray代码>和在方法中
jsonArray = (JSONArray)new JSONParser().parse(javaArray);
我得到了正确的数组。你可以用很多方法来实现它,你有一个具体的问题吗?请你详细说明一下好吗?我对Java不太熟悉,但是,我确实尝试使用getter和setter来检索值,但我什么也得不到。查看本教程了解更多详细信息:你能详细说明我在action类中应该做什么吗??我确实尝试了你的建议,但我没有从jsp中获得任何值。name
属性用于映射目标操作中的目标属性。如果您编写name=“foo[0].project”
,则需要在更新
操作(以您的表单为目标)私有列表foo代码>。如果您编写name=“foo.project”
,则需要私有项目数据库foo代码>。如果您编写数组[%{{#alStatus.index}].project
,则需要私有列表数组代码>。别忘了那个二传手;)漂亮的阿凡达,卡尔文和霍布斯FTW 8)
jsonArray = (JSONArray)new JSONParser().parse(javaArray);