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

时间:2015-09-21 05:13:37

标签: html forms jsp struts2 struts-tags

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

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

struts.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>

EditUserAction.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;
    }

}

edituser.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 个答案:

答案 0 :(得分:0)

  1. 使用<s:property/>时,您不是创建表单标记,而是创建简单文本。
    发送与<s:property/>use an <s:hidden/>一起打印的内容。

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

  3. 您甚至没有使用表单。您需要一个表单以标准的非AJAX方式发布一些内容。

  4. 您需要两个操作方法或两个操作:一个用于显示数据,另一个用于编辑数据。
    在您的execute()方法中,您每次都会初始化您的列表:
    liUser=new ArrayList<User>();,所以来自该页面的内容将永远丢失。

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