Не могу отправить правильный ключ к сервлету - PullRequest
0 голосов
/ 06 октября 2011

Я не могу отправить правильный ключ объекта сервлету в моем веб-приложении. Я использую метод 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 будет читать 5 записей в элементе MOFornecedorList в порядке возрастания, и в последнем столбце будет создана кнопка.

При нажатии кнопки, например, в третьей записи, вызывается метод JavaScript Modf () и отображается диалоговое окно подтверждения.

Когда пользователь нажимает кнопку ОК, отправляется форма FModifi.

Затем сервлет получит запрос на открытие страницы FMOb, где будет извлечен скрытый ввод для нажатой кнопки и помещен в переменную типа int, а другой код будет выполнен.

Но значение, которое отправляет форма, неверно. например:

1 - кнопка - MOforn = 1

2 - кнопка - MOforn = 2

3 - кнопка - MOforn = 3 (нажата)

4 - кнопка - MOforn = 4

5 - кнопка - MOforn = 5

Форма должна отправлять значение 3, но отправляет значение 5.

Так что, пожалуйста, если у кого-нибудь есть идеи, пожалуйста, поделитесь.

1 Ответ

0 голосов
/ 08 октября 2011

У вас есть несколько форм с одним именем. Ваша функция 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 от того, от кого вы ожидаете ответа при публикации вопроса ...)

...