不能向servlet发送正确的密钥

Cant send the right key to the servlet

本文关键字:密钥 servlet 不能      更新时间:2023-09-26

我似乎无法在我的web应用程序中发送正确的实体键给servlet。我使用javascript方法通过按钮提交带有数据的表单。代码分为jstl代码:

  <c:if test="${!empty MOFornecedorList}">    
                        <div id="RightColumn">
                              <%-- Search Box --%>
                                         <div class="searchform">
                                              <form id="formsearch" name="formsearch" method="post" action="<c:url value='FProcurar'/>">
                                                <span>
                                                    <input  name="searchBox" class="editbox_search" id="editbox_search"  size="80" maxlength="100" value="Pesquisa" type="text" />
                                                </span>
                                                <input name="btnsearch" class="button_search" value="Pesquisa" type="button"/>
                                              </form>
                                             <div class="clr"></div>
                                             <h>Criterio de Pesquisa: </h>                                
                                             <select name="Type">                                    
                                                 <option value="1">ID</option>
                                                 <option value="2">Nome</option>
                                                 <option value="3">Email</option>
                                                 <option value="4">Fax</option>
                                                 <option value="5">Endereço</option>                                              
                                             </select>
                                        </div> 
                                 <%-- END Search Box --%>
                         <div class="clr"></div>
                          <table id="ProductTable" class="detailsTable">
                                <tr class="header">
                                    <th colspan="9" >Modificar Fornecedor</th>
                                </tr>
                                <tr class="tableHeading">
                                    <td>ID</td>
                                    <td>Nome</td>
                                    <td>Endereço</td>                                       
                                    <td>Nº de Celular</td>
                                    <td>Nº de Telefone</td>
                                    <td>Email</td>    
                                    <td>Fax</td> 
                                    <td>Descrição</td>
                                    <td></td>
                                </tr>
                                <c:forEach var="MOForn" items="${MOFornecedorList}" varStatus="iter">
                                   <tr class="${'white'} tableRow">   
                                        <td>${MOForn.getFid()}</td>
                                        <td>${MOForn.getFNome()}</td>
                                        <td>${MOForn.getFEndereco()}</td>                                           
                                        <td>${MOForn.getFNCel()}</td>
                                        <td>${MOForn.getFNTel()}</td>
                                        <td>${MOForn.getFEmail()}</td>    
                                        <td>${MOForn.getFFax()}</td>
                                        <td>${MOForn.getFDescricao()}</td>
                                        <td>
                                            <form action="<c:url value='FMOb'/>" method="post" name="FModifi">
                                                <input type="hidden"
                                                       name="MOForn"
                                                       value="${MOForn.fid}">                                                
                                                <input type="button"
                                                       value="Modificar" onclick="ModF()">
                                            </form>
                                        </td> 
                                    </tr>
                                </c:forEach>
                            </table> 
                          </div>
                        </c:if>

javascript方法

 function ModF() {
                    jConfirm('Modificar o Fornecedor?', 'Confirmação', function(r) {
                             if (r == true) {                                     
                                 $("form[name='FModifi']").submit();                           
                                } else {
                                  return false;
                                }
                    });
                }

和控制器代码:

//Check if fornecedor as been selected            
            int Fid = Integer.parseInt(request.getParameter("MOForn"));
          //Get fornecedor object and set it to variable
          Forn = transManager.getEnt(Fid,"fornecedor");  
          request.setAttribute("Forn",Forn);      
          PagesInF="FModificar";
          request.setAttribute("PagesInF", PagesInF);
          userPath = "/Fornecedor";             

现在,当我测试代码时,jstl将按升序读取MOFornecedorList项中的5条记录,并在最后一列中创建一个按钮。

当按钮被按下时,例如在第三条记录中,JavaScript方法Modf()被调用,并显示一个确认对话框。

当用户按下OK按钮时,表单FModifi被提交。

然后servlet将接收打开页面FMOb的请求,其中按下按钮的隐藏输入将被检索并放入变量类型int中,并执行一些其他代码。

但是表单提交的值是错误的。例:

1 - button - moform = 1

2 - button - moform = 2

3 - button - moform = 3 (click)

4 - button - moform = 4

5 - button - moform = 5

Form发送的值应该是3,但是发送的值是5。

所以如果有人有任何想法请分享

您有多个具有相同名称的表单。你的JS函数并没有提交调用它的表单,而是提交了在HTML DOM树中最后一次出现该名称的表单。

你需要替换

<input type="button" value="Modificar" onclick="ModF()">

<input type="button" value="Modificar" onclick="confirmSubmit(this.form)">

,重写如下:

function confirmSubmit(form) {
    jConfirm('Modificar o Fornecedor?', 'Confirmação', function(confirmed) {
        if (confirmed) {
            form.submit();
        }
    }
}

我还建议使用更多的自文档变量和函数名称,如上面所示,这样你的代码更容易理解和维护在长期(不仅为你自己,但也为别人,例如那些在Stackoverflow.com从谁你期望一个答案,当你发布一个问题…)