代码之家  ›  专栏  ›  技术社区  ›  San Toe

单击生成的提交按钮时,如何获取另一个操作的生成行值的值

  •  0
  • San Toe  · 技术社区  · 9 年前

    我想知道当单击为每一行动态生成的提交按钮时,如何获取动态生成的表行值(例如empp_id)。

    下面是我的代码。我曾经生成每一行,并为每一行提交按钮。我不知道如何使用提交按钮获取“id”列的值并将其传递给另一个操作。

    支柱.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="false" />
    
        <package name="default" namespace="/" extends="struts-default">
    
    
            <action name="edit" class="com.ojt.database.EditUserAction" method="execute">
                <result name="success">edituser.jsp</result>
                <result name="error"></result>
            </action>
    
    </struts>
    

    编辑用户操作.java

    package com.ojt.database;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    @SuppressWarnings("serial")
    public class EditUserAction extends ActionSupport {
        List<User> liUser=null;
    
    
        public List<User> getLiUser() {
            return liUser;
        }
    
    
        public void setLiUser(List<User> liUser) {
            this.liUser = liUser;
        }
    
    
        @Override
        public String execute() throws Exception {
            Connection conn;
            String ret = "error";
            try {
    
                String url = "jdbc:mysql://localhost:3306/test";
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection(url, "root", "root");
                String sql = "SELECT * FROM user";
                PreparedStatement ps = conn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();
                liUser=new ArrayList<User>();
                while (rs.next()) {
                    User user = new User();
                    user.setId(rs.getInt(1));
                    user.setName(rs.getString(2));
                    user.setPassword(rs.getString(3));
                    liUser.add(user);   
                }
                conn.close();
                ret = "success";
                System.out.println(ret);
            } catch (Exception e) {
                e.printStackTrace();
                ret = "error";
                System.out.println(ret);
            }
            return ret;
        }
    
    }
    

    编辑用户.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <%@ taglib prefix="display" uri="http://displaytag.sf.net/el"%>
    <!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>Edit</title>
    </head>
    <body>
        <table cellpadding="20" align="center">
            <tr>
                <th>Id</th>
                <th>Name</th>
                <th>Password</th>
    
            </tr>
    
            <s:iterator value="liUser">
                <tr>
                    <td><s:property value="id" /></td>
    
                    <td><s:property value="name" /></td>
                    <td><s:property value="password" /></td>
                    <td><s:submit value="Edit" theme="simple" action="review" method="POST"/></td>
                </tr>
            </s:iterator>
        </table>
    
    </body>
    </html>
    

    我需要你的帮助。 我不能再往前走了,我被困在这里了。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Community CDub    8 年前
    1. 当您使用 <s:property/> ,您创建的不是表单标记,而是简单的文本。
      发送打印有 <s: 属性/> , use an <s:hidden/> 与之相结合。

    2. 要从JSP发送对象列表,需要使用 IteratorStatus object to specify an index .

    3. 你甚至没有使用表单。你需要一个表单来以标准的非AJAX方式进行POST。

    4. 您需要两个操作的方法或两个操作:一个用于显示数据,另一个用于编辑数据。
      在您的 execute() 每次初始化列表的方法:
      liUser=new ArrayList<User>(); ,
      因此,来自页面的信息将始终丢失。

    你在深水中。我建议你停下来仔细看看HTML、HTTP、Struts2及其标签,否则你很快就会感到沮丧。