サーブレットRequestAware ActionContextの使用上の注意点
@SuppressWarnings("serial")
public class TestRequestAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request ;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
String retString = request.getParameter("retString");
public String showRet(){
System.out.println(retString);
return this.SUCCESS;
}
}
---------------------------------------------------------------------------------
@SuppressWarnings("serial")
public class TestRequestAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request ;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String showRet(){
String retString = request.getParameter("retString");
System.out.println(retString);
return this.SUCCESS;
}
}
第1セグメントコードと第2世代コードの違いを見ましたか?違いはrequestを使用する場所の違いであり、最初のコードを使用すると報告される可能性があります.
「Unable to instantiate Action,....action.CartAction,defined for'...'in namespace'/...'null」のエラー.
実行順序:
1.requestリクエストによるactionのネーミングスペースの取得
2.servlet要求のPathに基づいて、その要求を呼び出すActionの名前を解析する(actionName)
3、Actionコンテキストの作成(extraContext)
4、前に獲得したnamespace、actionName、extraContextに基づいて、ActonProxyを作成する
5、proxyのexecute()メソッドを実行し、Actionが実行した戻り値に基づいて対応するResult(戻り結果処理)を実行するメソッドを呼び出す.
HttpServiceletRequestインスタンスを持つには、Actionオブジェクトインスタンスを構築します.
同様のActionContextオブジェクトインスタンスがActionContextオブジェクトインスタンスよりも前に作成する、このようにしてActionContextコンテナオブジェクトがnullを返す可能性がある.
したがって、サブ問題を解決する方法は簡単である、メンバー変数や構築方法で直接注入オブジェクトを使用したり、ActionContextを呼び出すのではなく、他の方法に置くべきである.