import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork.ActionContext;
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
//ServletActionContext.SESSION;
//ServletActionContext.PAGE_CONTEXT;
在webwork2的action裏取request.getParameter參數
webwork的action已經脫離的request,是用getXxx()來取提交過來的參數
如果在寫程序的時候特定需要自己來取Parameter可以通過以下兩種方法實現
第一種用ActionContext類,所有的參數都從這裏ActionContext.getContext().getParameters()取
他返回的是一個Map類型
Map param= ActionContext.getContext().getParameters();
如果有一個提交過來的username
那就可以這樣寫
param.get("username");不過這裏要注意一下param.get("username")是一個String數組(爲什麼要返回數據我也不知道,我從weblogic窗口看到param.get("username")被out出來Ljava.lang.String,忙活了半天)
String value[] = (String[])param.get("username");
String username = "";
for(int i=0;i<value.length;i++)
{
username +=value[i];
}
這樣就可以得到正確的username了
第二種方法是直接把request引用進來
ServletActionContext.getRequest().getParameter("username")
ServletActionContext.getRequest()就是httpservletrequest
這個類再import com.opensymphony.webwork.ServletActionContext
用起來方便些
webwork的action已經脫離的request,是用getXxx()來取提交過來的參數
如果在寫程序的時候特定需要自己來取Parameter可以通過以下兩種方法實現
WebWork之Session ---------
由於WebWork對request,parameter,Session和Application都進行了封裝,將這些隱含的對象封裝成了相應的Map,如RequestMap,ParameterMap,SessionMap和ApplicationMap,而這些Map就組成了ActionContext,因此我們通常都不再需要與request,session這些底層的對象打交道了,這也是我一開始覺得迷惑的地方,因爲我找不到Session了。事實上,對於SessionMap的處理即是對Session的處理了。我們可以通過ActionContext的靜態方法getContext返回一個ActionContext的實例,然後再調用其getSession方法獲得SessionMap,接着就可以利用put和get方法對session進行讀寫的操作了。
而在頁面上,我們可以通過以下的方式對session進行操作:
<webwork:property value="#session.name" />
#session.name表示從SessionMap中取得與"name"這個key對應的對象,實際上是調用瞭如下的statement:ActionContext.getContext().getSession().get("name"),並且進行了類型的轉換。又如:
<webwork:property value="#session.player.name" />
則是在SessionMap中獲得了Player對象之後,並調用類Player的getter方法:getName()獲得name屬性。
簡而言之,爲了能夠降低與部署環境的耦合程度,WebWork將Servlet的隱含對象進行了封裝,這在很大程度上簡化了開發的工作。而且WebWork也提供了類ServletActionContext,我們通過這個類中的getRequest方法獲得原始的HttpServletRequest,然後就可以對request和session這些底層對象進行操作了。但是,一般情況下,利用ActionContext.getSession()可以完成幾乎所有的工作了,我們又爲什麼要去碰那些底層的東西呢?因此我們應該優先考慮使用SessionMap,而不是底層的session。
另外一個需要注意的問題,就是SessionMap和隱藏對象session的作用域是不同的。也就是說,通過 ActionContext.getContext().getSession().put("name","Fantasy Soft"),往SessionMap中寫入了與"name"這個key相對應的內容,但是在頁面上通過session.getAttribute("name")得到的將會是null。
訪問Application,session,request 對象
Trim by Alex.Sue
Webwork提供了很多的方法來訪問Session,Application,Request。
Eg:
Map session = (Map) ActionContext.getContext().get("session");
session.put("myId",myProp);
或者:
ServletActionContext.getRequest().getSession()
Note:不要在action的構造函數裏調用ActionContext.getContext()。可能因爲值未設置而返回的是null值。
Note Also:ActionContext.getContext().get(“session”)=(Map)
ActionContext.getContext().getContext.getSession().
如果需要訪問HttpSession,可以通過ServletConfigInterceptor接口。
在視圖層中,JSP可以通過以下的方式訪問:
<ww: property value="#session.myId" />
<ww: property value="#request.myId" />
所有的servlet範圍可以這樣的訪問:
Map request = (Map) ActionContext.getContext().get("request");
request.put("myId",myProp);
Map application = (Map) ActionContext.getContext().get("application");
application.put("myId",myProp);
Map session = (Map) ActionContext.getContext().get("attr");
attr.put("myId",myProp);