【问题标题】:How to send data from a JSP page to Action class?如何将数据从 JSP 页面发送到 Action 类?
【发布时间】:2018-03-01 15:23:22
【问题描述】:

我有两个动作类,即loginAction和EditUserAction类。登录动作类包含一个在JSP页面中迭代的对象数组列表,即查看用户页面。

这是我 LoginAction.java {

package posidex.Demo.UAM;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.struts2.dispatcher.SessionMap;

import posidex.Demo.DAO.DataModel;
import posidex.Demo.DAO.GetDBCOnnection;
import posidex.Demo.DAO.SessionBase;

public class LoginAction extends SessionBase {

    Connection conn = null;

    Properties readFile = new Properties();

    FileInputStream fileStream = null;

    ResultSet recordSet = null;

    DataModel resultModel = null;

    PreparedStatement forResult = null;

    SessionMap<String, Object> loginMap = null;

    ArrayList<DataModel> list = new ArrayList<DataModel>();

    public ArrayList<DataModel> getList() {
        return list;
    }

    public void setList(ArrayList<DataModel> list) {
        this.list = list;
    }

    Logger log = LogManager.getLogger(LoginAction.class);

    public String getDbDetails() {

        try {

            log.debug("Inside getDbDetails Method");
            fileStream = new FileInputStream(
                    "/home/ast-developer/NewWorkspace/User Access Management/src/Database.properties");

            readFile.load(fileStream);

            conn = GetDBCOnnection.getDbConnection();

            if (conn != null) {
                forResult = conn.prepareStatement(readFile.getProperty("db.selectQuery"));

                recordSet = forResult.executeQuery();

            }

            if (recordSet != null) {

                while (recordSet.next()) {

                    resultModel = new DataModel();
                    resultModel.setUserId(recordSet.getInt(1));
                    resultModel.setFirstName(recordSet.getString(2));
                    resultModel.setLastName(recordSet.getString(3));
                    resultModel.setEmailId(recordSet.getString(4));
                    resultModel.setUserRole(recordSet.getString(5));
                    resultModel.setUserPhone(recordSet.getLong(6));
                    resultModel.setUserStatus(recordSet.getString(7));
                    list.add(resultModel);
                }

                loginMap = getSession();

                loginMap.put("mylist", list);

                setSession(loginMap);

            }
        } catch (IOException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        } finally {
            try {
                fileStream.close();
                conn.close();
                forResult.close();
                recordSet.close();
            } catch (SQLException | IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

        return "success";
    }

}

}

这是查看用户 JSP {

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>View User Page</title>
</head>
<body>
    <s:form action="createUser" method="post" id="options">
        <div id="outer div"
            style="width: 180px; display: inline-block; margin: 2px">
            <select
                style="width: 150px; vertical-align: top; height: 30px; margin: 1px"
                name="user_Status" id="status_List">
                <option selected>Active</option>
                <option>Suspended</option>
            </select>
        </div>
        <div style="display: inline-block; margin: 1px">
            <div>
                <s:submit
                    style="width: 150px; align: left; height: 30px; margin:1px"
                    value="Create User"></s:submit>
            </div>
        </div>
    </s:form>

    <s:form action="editUser" method="post">

        <div id="results" style="border: solid 1px #444; margin: 3px">

            <table>

                <tr>
                    <td>User ID</td>
                    <td>First Name</td>
                    <td>Last Name</td>
                    <td>Email Id</td>
                    <td>Role</td>
                    <td>Contact</td>
                    <td>Status</td>
                    <td>Action</td>

                </tr>
                <s:iterator value="list">
                    <tr>
                        <td><s:property value="userId"></s:property></td>
                        <td><s:property value="firstName"></s:property></td>
                        <td><s:property value="lastName"></s:property></td>
                        <td><s:property value="emailId"></s:property></td>
                        <td><s:property value="userRole"></s:property></td>
                        <td><s:property value="userPhone"></s:property></td>
                        <td><s:property value="userStatus"></s:property></td>
                        <td><s:url value="EditUserAction.action" var="url">
                                <s:param name="userId" value="userID" />
                            </s:url> <s:a href="%{url}">
                                <s:submit value="E" />
                            </s:a></td>

                    </tr>
                </s:iterator>
            </table>
        </div>

    </s:form>
</body>
</html>

}

这是 JSP 的快照。 !(fileJSP SNAP:///home/ast-developer/Pictures/Screenshot%20from%202017-09-21%2010:20:33.png) 如您所见,对象值的数组列表是使用 JSP 打印的。JSP 有一个针对每个用户详细信息的提交按钮,该按钮调用一个操作。我想捕获该特定用户的 userId,其按钮被单击以传递给 editAction 类。我该怎么做?

【问题讨论】:

  • 您通过表单提交或 Ajax 请求(或者从技术上讲,类似于 WebSockets)从客户端发送数据。这些是您的基本选择——具体问题是什么?
  • 您可以使用editAction.action?userId="TEST"等查询参数进行ajax调用并发送数据,然后在操作类中您可以使用request.getParameter("userId");获取从前端传递的userId值。
  • @DaveNewton 我添加了 JSP 页面的快照。如您所见,每个用户都有一个 E 按钮。此按钮有一个操作类,我将在其中编辑存储在 ArrayList 中的详细信息已经在 loginAction 类中并使用相同的 List 在 JSP 上显示它们。出于编辑目的,我通过实现 SessionAware 并将该 List 放在 EditUser 类可访问的地图中,在 EditAction 类中使用相同的 ArrayList。我需要搜索基于特定用户的 userId 的 ArrayList,我需要从 JSP 页面传递,我无法做到。请帮忙?

标签: jsp struts2


【解决方案1】:
<html>
<body>
<script>
    function abc()
    {
        var xhttp=new XMLHttpRequest();
        xhttp.onreadystatechange=function(){
        if(this.status=200 && this.readyState==4)
        {
            document.getElementById("divi").innerHTML=this.responseText;
        }   
    };
    xhttp.open('GET','abc.txt',true);
    xhttp.send();
}
</script>
<div id="divi">
    <h1>AJAX CHANGE MAGIC</h1>
    <input type="button" value="click me for magic" onclick="abc()"/>
</div>

</body>
</html>

【讨论】:

  • 示例 Ajax 调用
  • 谢谢......但我正在寻找不使用这个的东西......比如使用查询字符串或struts标签将参数从jsp页面传递到动作类
  • @HimanshuChaudhary 所以使用查询字符串。如前所述,您的选择是表单提交或 Ajax(或者我想只是一个简单的链接)。
  • var email=document.myform.email.value; var url="check_mail.jsp?val="+email;这就是您如何将您的查询添加到您的 url,然后代替 abc.txt 添加 url..
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2019-04-06
  • 2014-08-29
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
相关资源
最近更新 更多