<body>
    <s:bean name="s03.MyDecider" var="myDecider"></s:bean>
    <s:subset source="{'aaa','bbbj2ee','ccc','dddJ2EE','j2ee'}" decider="#myDecider" var="newList"></s:subset>
    ${pageScope.newList }
    <table border="1" width="300">
     <s:iterator status="st" value="#attr.newList">
     <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
     <td>
     <s:property/>
     </td>
     </tr>
     </s:iterator>
    </table>
  </body>
不是很明白,<s:bean>标签中的myDecider可以在后面#myDecider这样用,而newList就必须#attr.newList这样。那么是不是说明他们放入的范围不同呢。那么怎么能知道不同标签是放入到什么范围了呢

解决方案 »

  1.   

    用debug标签看啊,有两个地方,Value Stack 中的可以直接访问,Stack Context里原要加“#”才能取得到。
      

  2.   

    Bean 导航的规范,通常用点记法(dot notation) 来引用属性,同时也要注意索引属性的访问。在 Web MVC 的表单中,以及标签中, Jarkata-Commons-BeanUtils  中用得很多。看点记法的示例:public OrderItem[] getOrderItem();  public void setOrderItem(OrderItem[] newArray);  public OrderItem[] getOrderItem(int index);  public void setOrderItem(int index, OrderItem orderItem); 比如像 Struts1 标签:< html:text property="stocks[1].code"/> 会显示出 FormBean 中 stocks 列表的第二个元素的 code 属性,提交就填充到相应的位置上去。
      

  3.   

    # 是 OGNL 表达式,如果你的 Java Web 容器不支持 EL 语言的,# 还是很有用的。关于 OGNL 原来钻研过两篇,可供参考:在仅实现到 Servlet 2.3/JSP 1.2 规范、JDK为1.4 的容器中用 Struts 2 会有什么问题?
    运行《Struts2 权威指南》 s-if.jsp 的异常引出对 EL 和 OGNL 的思考
      

  4.   

    ognl表达式, 用于访问栈上下文环境中的值。
    #myDecider等价于${myDecider}