2011-10-06 71 views
0

我似乎無法將正確的實體密鑰發送到我的web應用程序中的servlet。我正在使用JavaScript方法通過按鈕提交表單與數據。 該代碼是分成JSTL代碼:無法將正確的密鑰發送給servlet

<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將讀取5個記錄在項目MOFornecedorList中按升序排列,並在最後一列創建一個按鈕。

當按下按鈕時,例如在第三個記錄中,將調用JavaScript方法Modf()並顯示確認對話框。

當用戶按下確定按鈕FModifi表單提交。

然後servlet會收到一個打開頁面FMOb的請求,其中被按下的按鈕的隱藏輸入將被檢索並放入一個變量類型int中,並執行一些其他代碼。

但表單提交的值是錯誤的。例如:

1 - 鍵 - MOforn = 1

2 - 鍵 - MOforn = 2

3 - 鍵 - MOforn = 3(點擊)

4 - 鍵 - MOforn = 4

5 - 鍵 - MOforn = 5

表單應發送的3值,但發送的5.

的值

所以請任何人有任何想法請分享。

回答

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(); 
     } 
    } 
} 

我也建議使用更多的自我記錄和變量函數名稱如上所述,以便您的代碼在長期內更易於理解和維護(而非onl你爲自己,但也爲他人,例如在你從誰的問題,你希望在回答你的問題時在Stackoverflow.com上的那些...)