当前位置: 首页 > 知识库问答 >
问题:

在struts2中将更新后的数组列表从jsp检索到action类

璩和璧
2023-03-14

我正在检索数据库值并将其放入数组列表(al)。该数组列表以表的形式显示在JSP页面中。我想修改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>

共有3个答案

徐旻
2023-03-14

以前我需要将javascript数组传递给strut 2的action类,我尝试了json,var arr1=["1","2","3"],

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

在Action类中,我编写了私有字符串javaArray 和输入方法

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

我得到了正确的数组。

吕冠宇
2023-03-14

>

  • 在迭代器中使用var而不是id(已弃用);在你的情况下,它甚至不需要。

    确保在目标操作(更新)中有一个列表

    使用<代码>

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

  • 傅安宁
    2023-03-14

    首先想到的是使表字段为输入类型,并将来自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中所做的那样。这是更新方法的演示示例,但它应该可以工作,我让您自己编写其余的代码。

     类似资料:
    • 我想知道这是否可能。在我的项目中,用户可以更新表的列值。但是其他用户在14天内看不到更新的值。在每次检索操作中将填充最多14天的旧值。有可能在laravel做吗?

    • 如何在JSP中分别显示id、txtfile和语句?如何将arraylist从servlet传递到JSP。 JSP:如何编辑我的JSP。我的JSP出现错误: 类型安全:未经检查的objectto arraylist强制转换

    • 我在从两个表中检索数据然后列出它们时遇到了一些问题。我想将用户的提要帖子和他们喜欢的活动全部列在一个列表中。 提要-用户帖子表 我想做的是:在活动墙中列出提要和类似用户的活动。 所以它应该输出如下(按时间戳desc排序): “这是用户A的帖子” 我的当前SQL: 然而,我的问题是我不知道如何链接这两个表,因为我的“feed”中的ID与“likes”中的ID不同

    • 如何将数据从Jsp表单检索到java控制器类(输入字段的名称从数据库表检索)。 我试着用方法,但在从jsp文件中的数据库表检索数据时,我无法在此方法中指定字段的特定名称 这是Jsp文件的图像,我试图从中将数据导入控制器类。形象

    • 我正在使用Struts 2框架,我想将对象列表从Java传输到JSP,然后再传输回Java。转移到JSP工作正常与

    • 我使用Java8 lambdas轻松筛选集合。但我没有找到一种简洁的方法来在同一语句中检索作为新列表的结果。这里是我迄今为止最简洁的方法: 网上的例子并没有回答我的问题,因为它们在没有生成新的结果列表的情况下就停止了。一定有更简洁的方式。我希望类具有、、…等方法 变量是否可以通过第三行直接赋值?