今天在struts2的iterator tag 和 expression 上花了很多时间, 不过总算搞定了, 也不算白忙一场。 TEST<br/> <s:if test="#application.dic != null"> Dictionary is there! </s:if> <s:else> Dictionary is empty! </s:else> <br/> <s:property value="#application.dic.keys"/> <br/> <pre> [s:iterator value="#application.dic" id="dicitem"] [s:property/], Key=[s:property value="key"/], Value=[s:property value="value"/], Dynamic access='[s:property value="#application.dic[key]"/]'[br/] [if you use #key here, it won't work!] [/s:iterator] </pre> <s:iterator value="#application.dic" id="dicitem"> <s:property/>, Key=<s:property value="key"/>, Value=<s:property value="value"/>, Dynamic access='<s:property value="#application.dic[key]"/>'<br/> </s:iterator> <br/> ===========TEST MAP WITH KEY IS STRING TYPE=========== <br/> <pre> [s:set name="mapKey" value="%{/"1/"}"/] [s:property value="mapKey"/][br/] [s:property value="#mapKey"/][br/] [s:property value="#application.dic"/] OK [br/] [s:property value="%{#application.dic}"/] OK [br/] Dynamic access='[s:property value="#application.dic[#mapKey]"/]'[br/] Dynamic access='[s:property value="#application.dic[mapKey]"/]'[br/] </pre> <s:set name="mapKey" value="%{/"1/"}"/> <s:property value="mapKey"/><br/> <s:property value="#mapKey"/><br/> <s:property value="#application.dic"/> OK <br/> <s:property value="%{#application.dic}"/> OK <br/> Dynamic access='<s:property value="#application.dic[#mapKey]"/>'<br/> Dynamic access='<s:property value="#application.dic[mapKey]"/>'<br/> ===========TEST MAP WITH KEY IS INTEGER TYPE=========== <br/> <pre> [s:set name="intKeyMap" value="/#{1:'foovalue', 2:'barvalue'}"/] [s:iterator value="intKeyMap"] Key=[s:property value="key"/], Value=[s:property value="value"/][br/] [/s:iterator] Dynamic access='[s:property value="/#intKeyMap[1]"/]'[br/] </pre> <s:set name="intKeyMap" value="#{1:'foovalue', 2:'barvalue'}"/> <s:iterator value="intKeyMap"> Key=<s:property value="key"/>, Value=<s:property value="value"/><br/> </s:iterator> Dynamic access='<s:property value="#intKeyMap[1]"/>'<br/>