struts2开发心得!

1:遍历Struts2的“值栈(ValueStack)”和“ActionContext”,及ValueStackOgnlValueStack 的区别:

<textarea cols="50" rows="15" name="code" class="java">&lt;%@ page import=&quot;com.opensymphony.xwork2.*&quot;%&gt; &lt;%@ page import=&quot;com.opensymphony.xwork2.util.*&quot;%&gt; &lt;%@ page import=&quot;java.util.*&quot;%&gt; &lt;% ActionContext cxt = ActionContext.getContext(); out.println(&quot;&lt;h2&gt;ValueStack&lt;/h2&gt;&quot;); ValueStack stack = cxt.getValueStack(); List list = (List) stack.getRoot(); for (int i=0; i&lt;list.size(); i++) { out.print(&quot;&lt;FONT Color='Red'&gt;&quot; + list.get(i)+&quot;&lt;/FONT&gt;&quot;); out.println(&quot;&lt;BR/&gt;&quot;); } out.println(&quot;&lt;h2&gt;ContextMap&lt;/h2&gt;&quot;); Map map = cxt.getContextMap(); Set set = map.entrySet(); for (Iterator it = set.iterator(); it.hasNext();) { Map.Entry es = (Map.Entry) it.next(); // key out.print(&quot;&lt;B&gt;&lt;Font Color='Red'&gt;&quot;+es.getKey()+&quot;&lt;/FONT&gt;&lt;/B&gt;&quot;); // value out.print(&quot;=&quot; + es.getValue()); out.println(&quot;&lt;br/&gt;&quot;); } %&gt;</textarea>

可以通过这种方法来好好看看值栈中到底放了些什么。对理解Struts2的参数封装有很大帮助!

但是,这种方式是取不到在Action中定义的属性值的,要取得Action中的属性值,必须使用如下代码:

<textarea cols="50" rows="15" name="code" class="c-sharp">com.opensymphony.xwork2.ognl.OgnlValueStack vs = (com.opensymphony.xwork2.ognl.OgnlValueStack)pageContext.getRequest().getAttribute(&quot;struts.valueStack&quot;); groupSearch =(OrgGroupSearch) vs.findValue(&quot;groupSearch&quot;, OrgGroupSearch.class);</textarea>

所以,ValueStackOgnlValueStack 的区别还是要好好研究一下,一般来说ValueStack中存储的是Action对象,而OgnlValueStack则对Action对象进行了解析,并把属性值也压入了值栈中了!

如果不使用OgnlValueStack的话,要通过ValueStack来取得Action中的属性值的话,必须先通过ValueStack取得Action对象,再通过Action对象来取得属性值(必须设置属性的getter方法),如:

<textarea cols="50" rows="15" name="code" class="java">GroupAction groupAction=(GroupAction) map.get(&quot;action&quot;); groupSearch =groupAction.getGroupSearch();</textarea>

 

 

2:struts2一旦發現你的類型轉換錯誤,或者輸入是不合法的數據,會自動定義struts.xml中action裏面的result的name為 input,即自動尋找名稱為input的結果。但是現在的struts.xml並沒有關於result名字為input的處理,所以它的提示錯誤消息是 “找不到結果集”。

 

 

 

你可能感兴趣的:(struts,iterator,input,action,import,getter)