在struts 2中使用Iterator时出错

时间:2011-04-19 06:47:15

标签: java struts2

我有一个迭代器,我正在尝试动态命名ID

 <s:iterator value="roleScreenDetailsList" status ="itemIndex">
     <table>      
    <tr class="normRow" id="row_<s:property value="#itemIndex.count"/>"          style="display:none;">
        <td colspan="8" class="bdr0">
            <s:textfield name="roleDescription" cssClass="txtboxDIS" id="Desc_<s:property value="#itemIndex.count"/>" size="30" disabled="true" />
         </td>

  </table>
 </s:iterator>

在上面的代码中,class =“normRow”的表行生成了正确的id,但是在文本字段的情况下,我收到以下错误

org.apache.jasper.JasperException: /WEB-INF/jsp/screens/role.jsp(150,102) Unterminated &lt;s:textfield tag

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

<s:iterator value="roleScreenDetailsList" status ="itemIndex">
   <table>
      <tr id="row_${itemIndex.count}">
         <td><s:textfield name="roleDescription" id="Desc_%{#itemIndex.count}" /></td>
      </tr>
   </table>
</s:iterator>
  • 始终使用表达式$ {} 而不是&lt; s:property /&gt; (类型转换除外),请参阅Struts2的 Performance Tuning
  • 始终使用 OGNL 作为Struts2标记的属性。

答案 1 :(得分:1)

尝试类似

的内容
 <s:iterator value="roleScreenDetailsList" status ="itemIndex">
     <table>      
    <tr class="normRow" id="row_<s:property value="#itemIndex.count"/>"          style="display:none;">
        <td colspan="8" class="bdr0">
            <s:textfield name="roleDescription" cssClass="txtboxDIS" id='Desc_<s:property value="#itemIndex.count"/>' size="30" disabled="true" />
         </td>

  </table>
 </s:iterator>

答案 2 :(得分:1)

自定义jsp标记不在其他jsp标记的属性内部进行评估。但是,在这种情况下,scriptlet应该可以工作:

<s:textfield name="roleDescription" cssClass="txtboxDIS"
    id='Desc_<%= ((org.apache.struts2.views.jsp.IteratorStatus)pageContext.findAttribute("itemIndex")).getCount() %>'
    size="30" disabled="true" />