Struts与JSTL中的迭代标签区别

字体大小: 中小 标准 ->行高大小: 标准
首先看一下一下代码,代码实现的功能就是根据年级搜索出对应的班级。
 
1.Struts的迭代标签:
 
<tr>
     <td>年级: </td>
     <td>
      <select name="grade" onchange="change();">
       <option>hello</option>
       <option>1</option>
       <option>2</option>
       <option>3</option>
      </select>
     </td>
    </tr>
    <tr>
     <td>班级: </td>
     <td>
      <select name="class2">
       <logic:iterate id="class1" name="classList" type="vo.Student" scope="request">
        <option><bean:write name="class1" property="name"/></option>
       </logic:iterate>
      </select>
     </td>
    </tr>
 
这是没有空判断的代码,一直会报这个错:javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find bean classList in scope request。为什么会这样呢,因为如果用logic:iterate 标签,在页面初始化的时候,如果在页面有输出项,必须进行空判断,所以修改为如下代码:
 
<tr>
     <td>班级: </td>
     <td>
      <select name="class2">
       <logic:empty name="classList">
        <option></option>
       </logic:empty>
      
       <logic:notEmpty name="classList">
        <logic:iterate id="class1" name="classList" type="vo.Student" scope="request">
         <option><bean:write name="class1" property="name"/></option>
        </logic:iterate>
       </logic:notEmpty>
      </select>
     </td>
    </tr>
 
这样就不会报错了。
 
2.JSTL的迭代标签:
 
<tr>
     <td>班级: </td>
     <td>
      <select name="class">
      <c:forEach items="${classList}" var="class">
       <option>${class.name }</option>
      </c:forEach> 
      </select>
     </td>
    </tr>
 
用JSTL的迭代标签就不会出现上面的那种空判断报错的情况。
 
总结:在页面初始化的时候,页面有输出项时,如果用struts的迭代标签,必须进行空判断,而jstl的迭代标签就不用进行空判断,具体什么原因,可能是不同的标签库封装细节不同的原因吧。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68899.html