【问题标题】:JSTL: Empty List doesn't show input fieldsJSTL:空列表不显示输入字段
【发布时间】:2016-06-15 03:10:55
【问题描述】:

我正在尝试创建一个 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 是如何处理的?

【问题讨论】:

  • 如果列表为空,只需检查控制器,然后通过简单地添加新地址来准备模型吗?还是不合逻辑?

标签: jsp arraylist jstl


【解决方案1】:

首先,您不应该将id 放在迭代中,因为它会在您的页面上重复id

其次,您应该检查列表是否为空并通过使用显示输入

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

然后在 else 短语中,您继续进行迭代。

【讨论】:

  • 您能否阅读我的 cmets 到上面的答案并给出您的意见?
【解决方案2】:

您可以像下面这样处理&lt;c:if test&gt; ....

//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>

【讨论】:

  • 但基本上你是在告诉我我必须复制输入字段!如果列表不为空,则显示带有值的输入。如果列表为空,那么我必须显示另一组空白输入字段。没有其他方法可以做到这一点吗??
  • 您的要求是什么?如果你的 ArrayList 是空的,你想做什么。?如果您的 arrayList 为空,则不应在输入字段中添加值。
  • 要求是显示输入框,以便用户可以编辑现有值,或添加任何空白值。例如,如果城市、州、邮政编码和国家存在,则显示带有值的输入框。但我还需要显示空白输入框,以便用户添加街道。问题是对于空的地址列表字段(例如本例中的街道),输入框不显示。
  • 如果只有一些字段有值怎么办? JSTL 不会显示空白值的输入框。
猜你喜欢
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
相关资源
最近更新 更多