无法将正确的密钥发送到servlet

时间:2011-10-06 15:17:35

标签: java javascript jquery servlets jstl

我似乎无法在我的网络应用中将正确的实体密钥发送到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 - 按钮 - MOforn = 1

2 - 按钮 - MOforn = 2

3 - 按钮 - MOforn = 3(点击)

4 - 按钮 - MOforn = 4

5 - 按钮 - MOforn = 5

表单应发送值3,但发送值为5。

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

1 个答案:

答案 0 :(得分:0)

您有多个同名的表单。你的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,当您发布问题时,您希望找到答案的人...)