0

いくつかのクラス変数を設定するストラットでインターセプターを作成しようとしています(ヘッダーページで使用したい)。これは私がやったことです

struts.xml

 <interceptors>
        <interceptor class="com.googlecode.sslplugin.interceptors.SSLInterceptor" name="secure" />
        <interceptor class="org.my.action.HeaderInterceptor" name="headerInterceptor" />
        <interceptor-stack name="myStack">
            <!-- TODO : uncomment this before release
            <interceptor-ref name="secure">
                <param name="useAnnotations">true</param>
                <param name="httpsPort">443</param>
                <param name="httpPort">80</param>
            </interceptor-ref>
            -->
            <interceptor-ref name="headerInterceptor" />
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/> 

インターセプターコード

public class HeaderInterceptor implements Interceptor {

private static final long serialVersionUID = 1L;

//added for inputs to HEADER
private String investorName;
private String investorImage;


@Override
public void destroy() {}

@Override
public void init() {}

@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
    setHeaderAttributes();
    return actionInvocation.invoke();
}


private void setHeaderAttributes()
{
    HttpServletRequest request = ServletActionContext.getRequest();
    HttpSession session = request.getSession();
    Object invObj = session.getAttribute(RangDeServerUtils.USER);
    if( null != invObj && invObj instanceof Investor){
    Investor investor = (Investor) invObj;
        this.investorName = investor.getFirstName();
        this.investorImage = Integer.toString(investor.getImageId());
    }
}

//have removed getters and setters for the class variables

}

リクエストごとにインターセプターがヒットし、クラス変数が設定されますが、jsp に表示されません。

私が間違っていることはありますか?? 助けてください。

4

2 に答える 2

0

する代わりに

    this.investorName = investor.getFirstName();
    this.investorImage = Integer.toString(investor.getImageId());

インターセプターで、私はしました

request.setParameter("investorName", investor.getFirstName());
request.setParamter("investorImage", Integer.toString(investor.getImageId()));

そしてそれはうまくいった。

于 2013-01-19T16:17:42.180 に答える
0

書かれているように質問を理解していますが、これがあなたが本当に望んでいること/必要なこと/すべきことであるかどうかについては議論があるようです. ここでのケースが何であれ、インターセプターを使用して Actions クラスに値を設定する方法です。

パラメーターインターセプターのソースを参照してください

現在のバージョンのソースをダウンロードして、その動作を確認することをお勧めします。

public String intercept(ActionInvocation invocation){
   //get the current action
   Object action = invocation.getAction();
   //figure out if your action supports what you want to do, either check its
   // interface or use reflection (or apache Bean/Property Utils) to see if it 
   // supports the properties you are interested in...
   if(action typeof MyInterface){
       MyInterface mi = (MyInterface)action;
       //set what you need how you need it
   }


   return invocation.invoke();
}
于 2013-01-18T23:14:14.363 に答える