Interceptor无法访问Action Parameters
我正在为struts2拦截器创建一个示例。 我创建了一个简单的登录页面,并使用自定义拦截器类来加密输入。 但是拦截器正在将ValueStack
的输入值读为null
。
我不明白我做错了什么。 我想struts.xml
和拦截器类就足够了。 如果您需要更多我的代码,请告诉我们。
在struts.xml
/success.jsp /index.jsp
拦截器.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
是我定义的一个单独的类,它可以自己正常工作。
如果你想访问参数, params
拦截器应该先行
/success.jsp /index.jsp
您的问题是这些参数没有转到valueStack
,您应该从动作上下文中获取它们。
Map params = ActionContext.getContext().getParameters();
但是在params
拦截器之后他们应该在那里。