【问题标题】:Saving and Passing String Array From JSP to Servlet将字符串数组从 JSP 保存并传递到 Servlet
【发布时间】:2017-08-19 09:24:04
【问题描述】:

我试图将用户输入保存在一个数组中,然后将其传递给 servlet。我不知道该怎么做。我已经搜索并尝试了不同的代码,但仍然没有运气。我不知道函数是否错误或语法错误,但我已经尝试使用我能想到的所有其他方法,但仍然卡住。

<body>
  <div id="display"></div>
  <div ng-controller="DemoCtrl" ng-cloak="" class="md-inline-form" ng-app="MyApp" layout="column" layout-sm="row" style="color: black" layout-align="center center" layout-align-sm="start start" layout-fill="">
    <md-content  class="md-whiteframe-10dp" flex-sm="">
      <md-toolbar flex="" id="materialToolbar">
        <div class="md-toolbar-tools">
          <span flex=""></span>
          <span class="md-headline" align="center">Registration Form</span>
          <span flex=""></span>
        </div>
      </md-toolbar>
      <div layout-padding="">
        <div></div>

        <%




                                                %>
        <form action=""  >
          <input type="hidden" name="action"  />
          <div layout="row" layout-sm="column">
            <md-input-container flex-gt-sm="">
              <label>LRN:</label>
              <input  name="a" id="lrn" required="" type="number" placeholder="Your LRN" style="width: 160px">
            </md-input-container>

            <md-input-container flex-gt-sm="">
              <label>Student Number:</label>
              <input  name="a" id="snum" required="" type="number" placeholder="Your Student Number">
            </md-input-container>
          </div>

          <div layout="row" layout-sm="column">
            <md-input-container flex-gt-sm="">
              <label>First Name</label>
              <input  name="a" id="fn" required="" type="text" placeholder="Your First Name">
            </md-input-container>

            <md-input-container flex-gt-sm="">
              <label>Middle Name:</label>
              <input  name="a" id="mn" required="" type="text"  placeholder="Your Middle Name">
            </md-input-container>

            <md-input-container flex-gt-sm="">
              <label>Last Name:</label>
              <input  name="a" id="ln" required="" type="text" placeholder="Your Last Name">
            </md-input-container>
          </div>

          <div layout="row" layout-sm="column">
            <p style="font-size: 12px; margin-left: 3px; margin-top: 18px;">Gender: </p>
            <input type="hidden" name="a" value="{{user.gender}}"  />
            <md-radio-group style="margin: 12px 0 19px;" ng-model="user.gender" required="">
              <md-radio-button value="Male" class="md-primary">Male</md-radio-button>
              <md-radio-button value="Female" ">Female</md-radio-button>
            </md-radio-group>
          </div>
          <div layout="row" layout-sm="column">
            <md-input-container flex-gt-sm="">
              <label>Parent</label>
              <input required="" type="text" id="p" name="a"  placeholder="Your Parent" />
            </md-input-container>
          </div>
          <div layout="row" layout-sm="column">
            <!--<md-button class="md-raised md-primary" style="width:100%; margin: 5px 5px;" type="submit"  >Submit</md-button><br><br>

                                <md-button class="md-raised md-primary" style="width:100%; margin: 5px 5px;" type="reset"  >Reset</md-button><br> -->
            <input type="submit" value="Save" onclick="insert();" />

            <input type="submit" value="Submit" onclick="form.action='register';" />
          </div>
        </form>
      </div>
    </md-content>
  </div>

</body>

这是我的函数,假设我在数组上按保存时会存储输入。但什么也没发生..

var LRN  = new Array();
var SNUM   =new Array();
var FN =new Array();
var MN  =new Array();
var LN   =new Array();
var G =new Array();
var P =new Array();

var lrnInput  = document.getElementById("lrn");
var snumInput   = document.getElementById("snum");
var fnInput = document.getElementById("fn");
var mnInput  = document.getElementById("mn");
var lnInput   = document.getElementById("ln");
var gInput = document.getElementById("g");
var pInput  = document.getElementById("p");

function insert ( ) {

var lrnInput  = document.getElementById("lrn").value();
var snumInput   = document.getElementById("snum").value();
var fnInput = document.getElementById("fn".value());
var mnInput  = document.getElementById("mn").value();
var lnInput   = document.getElementById("ln").value();
var gInput = document.getElementById("g").value();
var pInput  = document.getElementById("p").value();

 LRN[LRN.length]=lrnInput
 SNUM[SNUM.length]=snumInput
 FN[FN.length]=fnInput
 MN[MN.length]=mnInput
 LN[LN.length]=lnInput
 G[G.length]=gInput
 P[P.length]=pInput; 
}

每当我点击保存按钮时,什么都没有发生......我只是尝试调用 lrn var 但我仍然不知道该怎么做

这是我的 Servlet 代码:

   response.setContentType("text/html;charset=UTF-8");
   PrintWriter out = response.getWriter();

   String[] lrn = request.getParameterValues("lrn");

   List<String> list = Arrays.asList(lrn);
   try {
       out.println("<html>");
       out.println("<head>");
       out.println("<title>INFORMATION</title>");
       out.println("<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css'>");
       out.println("<link rel='stylesheet' href='css/style1.css'>");
       out.println("</head>");

       out.println("<body>");
       out.println("<section>");
       out.println("<h1>MALE</h1>");
       out.println("<div class='tbl-header'>");
       out.println("<table cellpadding='0' cellspacing='0' border='0'>");
       out.println("<thead>");
       out.println("<tr>");
       out.println("<th>LRN</th>");
       out.println("<th>Student Number</th>");
       out.println("<th>First Name</th>");
       out.println("<th>Middle Name</th>");
       out.println("<th>Last Name</th>");
       out.println("<th>Gender</th>");
       out.println("<th>Parent</th>");
       out.println("</tr>");
       out.println("</thead>");
       out.println("</table>");
       out.println("<div class='tbl-content'>");
       out.println("<table cellpadding='0' cellspacing='0'border='0'>");
       out.println("<tbody>");

       for (int i = 0; i<list.size(); i++) {
           if (i>0 && i%7==0) {
               out.println("</tr><tr>");
           }
           out.println("<td>" + list.get(i) + "</td>");
       }
   /*
   out.println("<td>"+lrn+"</td>");
   out.println("<td>"+snum+"</td>");
   out.println("<td>"+fn+"</td>");
   out.println("<td>"+mn+"</td>");
   out.println("<td>"+ln+"</td>");
   out.println("<td>"+gender+"</td>");
   out.println("<td>"+parent+"</td>");*/

       out.println("</tbody>");
       out.println("</table>");
       out.println("</div>");

       out.println("</section>");

       out.println("<section>");
       out.println("<h1>FEMALE</h1>");
       out.println("<div class='tbl-header'>");
       out.println("<table cellpadding='0' cellspacing='0' border='0'>");
       out.println("<thead>");
       out.println("<tr>");
       out.println("<th>LRN</th>");
       out.println("<th>Student Number</th>");
       out.println("<th>First Name</th>");
       out.println("<th>Middle Name</th>");
       out.println("<th>Last Name</th>");
       out.println("<th>Parent</th>");
       out.println("</tr>");
       out.println("</thead>");
       out.println("</table>");
       out.println("<div class='tbl-content'>");
       out.println("<table cellpadding='0' cellspacing='0'border='0'>");
       out.println("<tbody>");

       out.println("</tbody>");
       out.println("</table>");
       out.println("</div>");
       out.println("</section>");
       out.println("<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>");
       out.println("<script src='js/index1.js'></script>");
       out.println("</body>");
       out.println("</html>");
   } finally {
       out.close();
   }

【问题讨论】:

  • 提交 html 表单时不能发送 javascript 数组。相反,您需要将它们存储在隐藏字段中,同时以逗号分隔的字符串调用 insert() 函数,然后在 Servlet 中拆分。
  • @GauravSrivastav 我该怎么做?
  • 只是在回答中分享代码。

标签: java html arrays jsp servlets


【解决方案1】:

在 jsp 文件中为要发送到 servlet 的每个值插入隐藏字段。 喜欢

<input type="hidden" name="lrnStr" />

然后在 insert() 函数中,您需要编写代码将每个 lrn 值附加到 lrnStr 隐藏表单字段中。

当您提交表单时,您将收到此字段并用逗号分隔它们并使用。

function insert ( ) {
//use jquery here
   $("#lrnStr").val($("#lrnStr").val()+","+$("#lrn").val());
   //same for other fields
}

在 servlet 代码中,您需要添加以下代码来获取值列表。

String lrnArray[] = null;
String lrnStr = request.getParameter("lrnStr");

if(lrnStr!=null){
 lrnArray = lrnStr.split(",");
 for (int i = 0; i<lrnArray.length; i++) {
       if (i>0 && i%7==0) {
           out.println("</tr><tr>");
       }
       out.println("<td>" + lrnArray[i] + "</td>");
 } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多