JSTL:空列表不显示输入字段

时间:2016-06-15 03:10:56

标签: jsp arraylist jstl

我正在尝试创建一个JSP“编辑”页面来编辑一个人的详细信息。 其中一个细节是地址的ArrayList。 虽然如果此人没有地址,ArrayList可能为空。

我的问题在于编辑页面的输入字段。 我正在尝试按如下方式显示ArrayList ......

   <c:forEach items="${person.details.addressList}" var="address">                  
  <label>Street:
    <input type="text" id="psnStreet"  name="street" value='${address.street}'>   
  </label>
    <label>City:
    <input type="text" id="psnCity"  name="city"  value="${address.city}" >
  </label>
    <label>State:
    <input type="text" id="psnState"  name="state"  value="${address.state}" >
  </label>
    <label>Postal Code:
    <input type="text" id="psnPCode"  name="postalCode"  value="${address.postalCode}" >
  </label>
    <label>Country:
    <input type="text" id="psnCountry"  name="country"  value="${address.country}" >
  </label>
 </c:forEach>

问题是当ArrayList为空时,输入字段不会显示在页面上!这几乎使得无法添加地址。

如何处理JSTL?

2 个答案:

答案 0 :(得分:0)

首先,您不应将id置于迭代中,因为它会在您的网页上重复id

其次,您应检查列表是否为空并使用

显示输入
<c:if test="${empty person.details.addressList}">

然后在其他短语中继续进行迭代。

答案 1 :(得分:0)

您可以使用以下<c:if test>来处理....

//When your array list is not empty,you will see with datas
     <c:if test='${not empty "${person.details.addressList}"}'>
                   <c:forEach items="${person.details.addressList}" var="address">                  
          <label>Street:
            <input type="text" id="psnStreet"  name="street" value='${address.street}'>   
          </label>
            <label>City:
            <input type="text" id="psnCity"  name="city"  value="${address.city}" >
          </label>
            <label>State:
            <input type="text" id="psnState"  name="state"  value="${address.state}" >
          </label>
            <label>Postal Code:
            <input type="text" id="psnPCode"  name="postalCode"  value="${address.postalCode}" >
          </label>
            <label>Country:
            <input type="text" id="psnCountry"  name="country"  value="${address.country}" >
          </label>
         </c:forEach>
        </c:if>
//When your array list is empty,you will see blank fields
        <c:if test="${empty person.details.addressList}">
         <c:forEach items="${person.details.addressList}" var="address">                  
      <label>Street:
        <input type="text" id="psnStreet"  name="street">   
      </label>
        <label>City:
        <input type="text" id="psnCity"  name="city">
      </label>
        <label>State:
        <input type="text" id="psnState"  name="state">
      </label>
        <label>Postal Code:
        <input type="text" id="psnPCode"  name="postalCode">
      </label>
        <label>Country:
        <input type="text" id="psnCountry"  name="country">
      </label>
     </c:forEach>
        </c:if>