JSTL:在每次迭代的foreach中为表单中的隐藏属性设置不同的值

问题描述:

我使用foreach在JSP页面上遍历一个列表。基于这个迭代,我为表格行设置了不同的值。在一列中,有一个超链接用于保存对表单的引用,以便点击此超链接时,表单被提交。这种形式有一个隐藏的属性,它应该在当前迭代中保存列表中的项目的值。 Onclick,提交隐藏属性中具有此列表项的值的表单。JSTL:在每次迭代的foreach中为表单中的隐藏属性设置不同的值

问题是只有列表中的第一个项目在每次迭代中都被设置为隐藏属性。下一个值永远不会被分配。

但是,表格中其他列的情况并非如此。它们在每行/元组中都有新的值。

<c:forEach items="${myList}" var="item"> 

     <!--iterating through this list. Some code here--> 
      <form action="callthis.jsp" id="request_form" method="post" target="_blank"> 
        <input type="hidden" id="requestxml" name="requestxml" value="${item.requestxml}" /></form> 
      <td> 
       <a href="javascript:document.getElementById('request_form').submit();"id="request"> 
       requestXML </a> 
      </td> 
     <!--some code here--> 
+0

您是否检查过从$ {item.requestxml}获取的值对于每一行都是不同的? –

+0

在我在这里迭代的集合中,值是不同的。 但最近的一个正在打印在我的JSP页面上的表中的所有行中。 –

+0

请使用开发人员工具检查每行的隐藏值。 –

你有2种选择:

//1- Only one form 
<form action="callthis.jsp" id="request_form" method="post" target="_blank"> 
    <c:forEach items="${myList}" var="item">   
     <!--iterating through this list. Some code here-->      
     <input type="hidden" id="requestxml" name="requestxml" value="${item.requestxml}" /> 
     <td> 
      <a href="javascript:document.getElementById('request_form').submit();"id="request">requestXML</a> 
     </td> 
    </c:forEach> 
</form> 

//2- render multiple forms with different ID using varStatus 
<c:forEach items="${myList}" var="item" varStatus="status">  
     <!--iterating through this list. Some code here--> 
     <form action="callthis.jsp" id="form_${status.index}" method="post" target="_blank"> 
      <input type="hidden" id="requestxml" name="requestxml" value="${item.requestxml}" /></form> 
      <td> 
       <a href="javascript:document.getElementById('form_#{status.index}').submit();"id="request">requestXML</a> 
      </td> 
     </form> 
</c:forEach> 
+0

@Kukeltje你是对的,它被纠正了,谢谢 –

您,是因为有多个形式相同的ID,因此它需要第一个唯一的ID分配给每个窗体。请参阅此代码。这仅仅是一个例子。

<c:forEach begin="1" end="5" var="item" varStatus="status"> 
    <form action="callthis.jsp" id="request_form${status.index}" method="post" 
     target="_blank"> 
     <input type="hidden" id="requestxml" name="requestxml" value="${item}" /> 
    </form> 
    <td><a 
     href="javascript:document.getElementById('request_form${it‌​em}').submit();" 
     id="request"> requestXML </a></td> 
</c:forEach> 
+0

'item'是一个复杂的对象。我强烈建议不要在jsf标识中使用'toString()'。而你的帖子格式不是很好。 – Kukeltje

+0

这只是一个例子。 –

+0

但这是一个拧紧建议的例子。如果你使它“正确”,它与其他答案是一样的......所以这是多余的 – Kukeltje