Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态使用JavaBean和Servlet值_Java_Jsp_Servlets_Dynamic_Javabeans - Fatal编程技术网

动态使用JavaBean和Servlet值

动态使用JavaBean和Servlet值,java,jsp,servlets,dynamic,javabeans,Java,Jsp,Servlets,Dynamic,Javabeans,我有一个表,它向servlet发送一个包含5个输入文本和值的表单post。在servlet中,我获取值并将它们设置到bean类中,我也将其设置到bean类中的sum作为sum。然后我在jsp表中获取值和sum。问题是,现在我正在创建一个按钮,当我单击时,我在最后一行之后插入一行,并且我想将值也与sum一起保留,我该怎么做呢 这是我的jsp,它将表单发送到Servlet:Test.jsp 试验 全部的 1. 2. 3. 4. 5. 现在我得到了servlet上的值,计算总和并将它们发送到Ja

我有一个表,它向servlet发送一个包含5个输入文本和值的表单post。在servlet中,我获取值并将它们设置到bean类中,我也将其设置到bean类中的sum作为sum。然后我在jsp表中获取值和sum。问题是,现在我正在创建一个按钮,当我单击时,我在最后一行之后插入一行,并且我想将值也与sum一起保留,我该怎么做呢

这是我的jsp,它将表单发送到Servlet:
Test.jsp


试验
全部的
1.
2.
3.
4.
5.

现在我得到了servlet上的值,计算总和并将它们发送到JavaBean:
servlet.java

HelloBean hello  = new HelloBean();
String[] values = request.getParameterValues("values");

if (values == null) {
    values = new String[5];

    for(int i = 0; i < 5; i++) {
        values[i]= "0";
    }
}

Integer sum = 0;

for (int i = 0; i < values.length; i++) {
    hello.setSum(sum = sum + Integer.valueOf(values[i]));
    hello.setValues(values);
}   

request.setAttribute("helloBean", hello);
request.getRequestDispatcher("/Test.jsp").forward(request, response);
public class HelloBean {
    String[] values;
    Integer sum;

    public Integer getSuma() {return sum;}
    public void setSum(Integer integer) {this.sum = integer;}
    public String[] getValues() {return values;}
    public void setValues(String[] val) {this.values = val;}
}
以下是我添加新行的方式:

$(“#btnAdd”)。单击(函数(){
var行=$(“#求和表tbody>tr:last”),
newRow=row.clone(true);
查找(“输入”).each(函数(){
var num=+(this.id.match(/\d+$/)| |[0])[0]+1;
this.id=this.id.replace(/\d+$/,“”)+num;
this.name=this.id;
});
newRow.insertAfter(row);
返回false;
});

提前谢谢你

只需在JSP页面中检查
sum
的值,并根据其值添加新行

伪代码: 当第一次加载页面时,
sum
的值将为
null
,当servlet重定向时,填充该值,
sum
将不为
null
,并在JSP页面中自动创建新行


它应该是这样的,并记住

int和=0;
对于(int i=0;i
它在JSP中应该是这样的:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    <tr>
        <td><input type="text" value="Test1" maxlength="25"/></td>
        <c:forEach items="${helloBean.values}" var="item">
            <td><input type="text" name="values" value="${item}" maxlength="2"/></td>
        </c:forEach>
    </tr>
    <c:if test="${helloBean.sum != null}">
        <tr>
          <td><input type="text" value="${helloBean.sum}" maxlength="3" readonly="readonly"/></td>
        </tr>
    </c:if>


有几点:

  • ID在整个页面中必须是唯一的。在循环中使用相同的id
    val
    创建多个
    input
    组件
  • 在每个标记的属性值周围使用双引号。是打字错误吗
  • 属性
    sum
    在类型
    user.HelloBean
    上不可读,因为类中没有
    getSum()
    方法

    • 不需要Bean类

      您可以为输入添加keyup事件
      如果有帮助的话,您可以这样做,而无需使用javascript添加新行

      1) -将名称添加到“添加”按钮

      <input type="button" id="btnAdd" ***name="addrow"*** value="+"/>
      
      3) -在Jsp端,在for循环下方添加

      <c:if test="${not empty request.addRow}">
         <td><input type="text" id="val" name="values" value="" maxlength=2/></td>
      </c:if>
      
      
      
      这将在您单击按钮时添加新的emty文本字段。
      注意:我没有测试这段代码

      用输入代码替换,我添加了“values[]”而不是“values”

      您可以将其用作数组,也可以在其中设置键

      <input type="text" id="val" name="values[]" value="${item}" maxlength=2/>
      
      
      
      但这将能够增加行数,提交时将显示值​​每行的数字和相应的总数?对不起,我不清楚。我想说的是,当页面刷新时,仅根据其值添加一个新行。或者只需在类中再创建一个变量,并在JSP中使用隐藏的输入字段来保留最后一个和的值。也许你理解错了,很抱歉我的解释。如果我写下5个值并单击“提交”,它会显示值和总和。但是如果我想添加一个新行,并将值相加,然后在第一行下显示它们,它们消失了。我尝试了很多方法,但我不明白。我有点迷路了:/pseudo code中使用的在
      前面加一个复选框,以便在最后一行添加新行。整个问题令人困惑,因为您太多地集中在JSP/Servlet方面,而您的具体问题实际上在JavaScript方面。你到底想要什么?在JS中解决这个问题,或者放弃整个JS方法,使用纯JSP/Servlet方法添加新行?也就是说,我还将花更多的精力寻找好的学习资源,并确保您不会通过20年前的资源学习JSP、Servlet和HTML。
      以及那些大写的HTML标记/属性和不带引号的属性值在1990-2000年间太过重要了。@BalusC非常感谢你告诉我我正在使用的代码的年代。我将尝试寻找新的资源。我有点不知道在哪里做操作。好吧,现在我得到了一行和总计的总和。我在servlet端进行计算,并将值分配给bean。但是我想在jsp中用一个按钮添加更多行,并计算每行的总计。我可以用一个按钮来完成,但我不知道如何添加更多。在jsp/servlet或HTML/JS中?您当前的代码使用HTML/JS(而不是使用JSP/Servlet)再添加一行。请注意,作为一名起步的web开发人员,您应该已经了解JSP/Servlet代码在web服务器中运行,并生成HTML/JS代码,这些代码从web服务器发送给webbrowser,webbrowser反过来运行HTML/JS代码。右键单击webbrowser中的页面并查看源,依此类推。这就是webbrowser检索到并正在执行的内容。您不应该在那里看到任何一行JSP/Servlet代码。@BalusC然后是HTML/JS,但我对如何做有点迷茫。因为我真的不知道我需要做什么。我建议使用knockout.js并在客户端添加正确的行,但是当我输入值并单击calc时,它只显示一行。@devtreat-你能解释更多关于“它只显示一行”的内容吗?因为,当我单击+它会再添加一行,但是,当我在新行上放置值并单击submit时,行和值也会消失。只保留第一行的总和和值。否。附加值不应消失。这意味着您没有在servlet代码中重新设置值。添加println语句并找出错误所在。我给了你大概的想法
              <script>
              $("#btnAdd").click(function () {
                  var row = $("#sum_table tbody > tr:last"),
                      newRow = row.clone(true);
                  newRow.find("input").each(function () {
                      var num = +(this.id.match(/\d+$/) || [0])[0] + 1;
                      this.id = this.id.replace(/\d+$/, "") + num;
                      this.name = this.id;
                  });
                  newRow.insertAfter(row);
                  return false;
              });
      
              $("#btnSubmit").click(function () {
                  $("#sum_table tbody tr").each(function() {
                      var row_total = 0; 
                      $("td:not('.test'), td:not('.sum') input:text",this).each(function() {
                          var val =$.trim($(this).val());  
                          //console.log('val='+val);
                          if(val!="" && !isNaN(val))
                         row_total += Number(val);
                      }); 
                      console.log('row_total='+row_total);
                      $(".sum :input:text",this).val(row_total);
                  });
              });
      
          </script>
      
       String[] test = request.getParameterValues("test");
       String[] sum = request.getParameterValues("sum");
      
      <input type="button" id="btnAdd" ***name="addrow"*** value="+"/>
      
      if (request.getParameter("addrow") != null){
        request.setAttribute("addRow","yes");
      }
      
      <c:if test="${not empty request.addRow}">
         <td><input type="text" id="val" name="values" value="" maxlength=2/></td>
      </c:if>
      
      <input type="text" id="val" name="values[]" value="${item}" maxlength=2/>