2016-04-19 3 views
1

У меня есть мнение на моем JSP, как это:Получить значение идентификатора из списка JSP

<form:form name = "command" 
     method = "post" 
     action = "withdrawRequest" 
      class = "form-horizontal group-border-dashed" 
      style = "border-radius: 0px;"> 
<table class = "table table-bordered" 
      id = "datatable-icons" > <!-- start table table-bordered --> 
    <thead> 
     <tr> 
      <th>ID</th> 
      <th>NO</th> 
      <th>AMOUNT (RP)</th> 
      <th>DOCTOR BALANCE (RP)</th> 
      <th>DOCTOR ID</th> 
      <th>DOCTOR NAME</th> 
      <th>TRANSFER ADMIN NAME</th> 
      <th>TRANSFER DATE</th> 
      <th>TRANSFER REFERENCE</th> 
      <th>TRANSFERRED</th> 
     </tr> 
    </thead> 
    <tbody> 
     <c:forEach var = "withdrawal" 
       items = "${listWithdrawals}" 
      varStatus = "loopStatus"> 
     <tr class="odd gradeX"> 
      <td>${withdrawal.id}</td> 
      <td>${loopStatus.index + 1}</td> 
      <td class="text-right"><fmt:formatNumber type="number" maxFractionDigits="2" value="${withdrawal.amount}" /></td> 
      <td class="text-right"><fmt:formatNumber type="number" maxFractionDigits="2" value="${withdrawal.doctor_balance}" /></td> 
      <td>${withdrawal.doctor_id}</td> 
      <td>${withdrawal.doctor_name}</td> 
      <td>${withdrawal.transfer_admin_name}</td> 
      <td><%-- <fmt:formatDate type="date" value="${withdrawal.transfer_date}" /> --%>${withdrawal.transfer_date}</td> 
      <td>${withdrawal.transfer_reference}</td> 
      <td class="text-center"> 
       <c:if test="${withdrawal.transferred == true}"> 
        <span class="label label-success">Transferred</span> 
       </c:if> 
       <c:if test="${withdrawal.transferred == false}"> 
        <button class="btn btn-warning btn-sm md-trigger" data-modal="form-primary" type="button">Pending</button> 
       </c:if> 
       <div class="md-modal colored-header danger custom-width md-effect-9" id="form-primary"> 
        <div class="md-content"> 
         <div class="modal-header"> 
          <h3>Confirm Withdrawal Request</h3> 
          <button type="button" class="close md-close" data-dismiss="modal" aria-hidden="true">&times;</button> 
         </div> 
         <div class="modal-body form"> 
          <div class="form-group"> 
           <label class="col-sm-3 control-label">Admin Name</label> 
           <div class="col-sm-9"> 
            <input type="text" class="form-control" name="adminName" value="${adminName}"> 
            <input type="text" class="form-control" name="id" value="${withdrawal.id}" /> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="col-sm-3 control-label">Transfer Reference</label> 
           <div class="col-sm-9"> 
            <input type="text" class="form-control" name="transferReference" value="${transferReference}"> 
           </div> 
          </div> 
         </div> 
         <div class="modal-footer"> 
          <button type="button" class="btn btn-default btn-flat md-close" data-dismiss="modal">Cancel</button> 
          <button type="submit" class="btn btn-danger btn-flat md-close" name="submitRequest">Submit</button> 
         </div> 
        </div> 
       </div> 
      </td> 
     </tr> 
     </c:forEach> 
    </tbody> 
</table> 
</form:form> 

Я не могу получить идентификатор кнопки, который я выбрал из поля зрения,

<input type = "text" 
     class = "form-control" 
     name = "id" 
     value = "${withdrawal.id}" /> 

Если я использую этот код

String withdrawalId = request.getParameter("id"); 

значение всегда 120. Например :

enter image description here

Как получить правильный идентификатор, когда я нажимаю модальное окно?

ответ

1

Похоже, проблема в Nifty Modal Window Effects Вы используете для po щенок. Он открывает модальное окно для последней строки.
Он может быть исправлен следующими модификациями jsp.

  1. Переместить объявление модального окна из таблицы. Сделайте его одиночным для страницы. И переименуйте поле id, чтобы сделать его уникальным, например.transferredId
  2. Добавить onclick кнопки открытия модального окна, чтобы INIT его (установить transferredId и другие) с необходимыми значениями

Так что ваша форма будет (только заканчивающейся для экономии места)

   .... 
       <td class="text-center"> 
       .... 
       <c:if test="${withdrawal.transferred == false}"> 
        <button class="btn btn-warning btn-sm md-trigger" data-modal="form-primary" type="button" 
        onclick="document.getElementById('transferredId').value=${withdrawal.id}"> 
        Pending 
        </button> 
       </c:if> 
      </td> 
     </tr> 
     </c:forEach> 
    </tbody> 
</table> 
<div class="md-modal colored-header danger custom-width md-effect-9" id="form-primary"> 
    <div class="md-content"> 
     <div class="modal-header"> 
      <h3>Confirm Withdrawal Request</h3> 
      <button type="button" class="close md-close" data-dismiss="modal" aria-hidden="true">&times;</button> 
     </div> 
     <div class="modal-body form"> 
      <div class="form-group"> 
       <label class="col-sm-3 control-label">Admin Name</label> 
       <div class="col-sm-9"> 
        <input type="text" class="form-control" name="adminName" value="${adminName}"> 
        <input type="text" class="form-control" name="transferredId" id="transferredId" /> 
       </div> 
      </div> 
      <div class="form-group"> 
       <label class="col-sm-3 control-label">Transfer Reference</label> 
       <div class="col-sm-9"> 
        <input type="text" class="form-control" name="transferReference"> 
       </div> 
      </div> 
     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default btn-flat md-close" data-dismiss="modal">Cancel</button> 
      <button type="submit" class="btn btn-danger btn-flat md-close" name="submitRequest">Submit</button> 
     </div> 
    </div> 
</div> 

После этого String withdrawalId = request.getParameter("transferredId"); вернет правильный идентификатор.

+0

aaaaaak вы лучшая брошь, большое вам спасибо за вашу помощь – unknown

0

Проверьте сгенерированный HTML-код. Полагает, что он содержит listWithdrawals.length экземпляров этого <input, и все они имеют одинаковое имя.

request.getParameter("id") собирается вернуть одно значение, а не список всех значений. Что вам нужно, это request.getParamaterValues("id"), который будет возвращать все из них.

Это связано с тем, что при отправке формы все эти входные значения будут отправлены.

Таким образом, простым решением (без магии JavaScript) является получение всех списков значений с помощью request.getParamaterValues и рассмотрение всего, что изменилось. ids[0] и transferReferences[0] бы необходимые значения для первого элемента в listWithdrawals:

String[] ids = request.getParamaterValues("id"); 
String[] transferReferences = request.getParamaterValues("transferReference"); 

for (int i = 0; i < ids.length; i++) { 
    System.out.println(ids[i]); 
    System.out.println(transferReferences[i]); 
} 

Другим решением будет генерировать уникальные имена для каждого входного/элемента в listWithdrawals:

<c:forEach var="withdrawal" items="${listWithdrawals}" varStatus="loopStatus"> 
    <input type="text" class="form-control" name="${'transferReference_'.concat(withdrawal.id)}" value="${withdrawal.id}" /> 
</c:forEach> 

И тогда вам 'd иметь доступ к transferReference значение withdrawal с ID 119 следующим образом:

request.getParameter("transferReference_119") 
+0

Если я использую это, я получу все из них id, как их spesific? – unknown

+0

См. Мой обновленный ответ. Вы не можете получить ТОЛЬКО ту, для которой вы открыли модальную версию. Это обычная форма HTML, которую вы отправляете, это нормально, что вы получите все значения. Ваша проблема и мои решения имеют дело с этим, различая все возвращенные элементы. –

+0

если мой триггер с помощью кнопки из модального окна, как его реализовать? – unknown

0

Извините меня, что не добавляйте это как комментарий, так как я не могу, потому что у меня все еще нет 50 репутации (все еще 16), я просто хочу, чтобы вы что-то проверили, попробуйте обновить страницу и откройте строку с ID 119 например, первый раз, я имею в виду любой Id, а не 120, и посмотрим, что произойдет, если значение, которое вы открыли в первый раз, всегда все еще существует, поэтому проблема не в идентификаторе 120, и проблема в том, что u может использовать, если не null чтобы установить значение где-то где, поэтому в первый раз оно будет равно null и добавлено к нему значение, но в следующий раз оно будет иметь значение, так что вы не сможете его изменить, и если вы не сможете решить проблему после этого , пожалуйста, загрузите ваш контроллер, чтобы мы могли обнаружить проблему.

Смежные вопросы