2013-07-15 66 views
2

我正在爲struts2攔截器創建一個示例。我創建了一個簡單的登錄頁面,並使用自定義攔截器類來加密輸入。但攔截器正在讀ValueStack的輸入值爲null攔截器無法訪問動作參數

我不明白我做錯了什麼。我想struts.xml和攔截器類是足夠的數據爲此。如果您需要更多我的代碼,請告訴。

struts.xml的

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.devMode" value="true" /> 
    <package name="myPackage" extends="struts-default"> 
    <interceptors> 
      <interceptor name="encrypt" class="com.keyur.struts2.interceptors.EncryptDecryptInterceptor"/> 
     </interceptors> 
     <action name="validatorAction" class="com.keyur.struts2.ActionClasses.validatorClass" method="execute"> 
     <interceptor-ref name="encrypt"></interceptor-ref> 
     <result name="success">/success.jsp</result> 
     <result name="input">/index.jsp</result> 
     </action> 
    </package> 
</struts> 

攔截java文件

package com.keyur.struts2.interceptors; 

import com.keyur.struts2.ActionClasses.validatorClass; 
import com.keyur.struts2.beans.EncryptorDecryptor; 
import com.opensymphony.xwork2.ActionInvocation; 
import com.opensymphony.xwork2.interceptor.Interceptor; 
import com.opensymphony.xwork2.util.ValueStack; 

public class EncryptDecryptInterceptor implements Interceptor { 

     EncryptorDecryptor encdec = new EncryptorDecryptor(); 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void init() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public String intercept(ActionInvocation arg0) throws Exception { 
     // TODO Auto-generated method stub 

     String result = arg0.invoke(); 

     ValueStack stack = arg0.getStack(); 
     String username = stack.findString("username"); 
     String password = stack.findString("password"); 

     System.out.println("Username: "+((validatorClass)stack.peek()).getUsername()); 
     System.out.println("Password: "+((validatorClass)stack.peek()).getPassword()); 
     //System.out.println(username); 
     //System.out.println(password); 

     //stack.set("username", encdec.encryptText(username)); 
     //stack.set("password", encdec.encryptText(password)); 

     return result; 
    } 
} 

EncryptorDecryptor是我已經定義了一個單獨的類,它是它自己的正常工作。

回答

3

如果您要訪問的參數,該params攔截先走

<action name="validatorAction" class="com.keyur.struts2.ActionClasses.validatorClass" method="execute"> 
    <interceptor-ref name="params"></interceptor-ref> 
    <interceptor-ref name="encrypt"></interceptor-ref> 
    <interceptor-ref name="defaultStack"></interceptor-ref> 
    <result name="success">/success.jsp</result> 
    <result name="input">/index.jsp</result> 
</action> 

你的問題是,這些參數不要去了valueStack,你或許應該從行動方面得到他們。

Map params = ActionContext.getContext().getParameters(); 

但是在params攔截器之後它們應該在那裏。

+0

哦,是的,我明白了。 所以當我定義我自己的攔截器引用時,默認的攔截器引用不會生效。對? –

+0

是的,你是對的 –

+0

THanx很多。有效。 –