首先定义我们自己的Interceptor
package com.web.interceptor;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.convention.annotation.ParentPackage;
import com.common.utils.StringUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.ValueStack;
import com.web.action.Constants;
@ParentPackage(value="struts-default")
public class LoginInterceptor extends AbstractInterceptor
{
/**
*
*/
private static final long serialVersionUID = 1L;
public static final String USER_SESSION_KEY="wallet.session.user";
public void init()
{}
@SuppressWarnings("unchecked")
@Override
public String intercept(ActionInvocation invocation) throws Exception
{
ActionContext actionContext = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
String uri = request.getRequestURI();
if(uri.indexOf("index.action")>-1)
{
return Constants.INPUT;
}
else if(uri.indexOf("login.action")>-1)
{
ValueStack vt = actionContext.getValueStack();
java.util.Map<String, Object> mp = vt.getContext();
java.util.Map<String, Object> paraMap = (java.util.Map<String,Object>)mp.get(ActionContext.PARAMETERS);
String[] name = (String[])paraMap.get("user.name");
//String name = (String)vt.findValue("user.name");
if(name!=null && name.length>0 && !StringUtil.hasContent(name[0]))
{
vt.set("fielderror", "必须输入用户名!");
return Constants.INPUT;
}
else return invocation.invoke();
}
else
return invocation.invoke();
}
public void destroy()
{}
}
将其注册到struts中,修改struts2.xml文件增加如下内容:
<package name="struts-interceptor" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="com.web.interceptor.LoginInterceptor"/>
</interceptors>
</package>
这样我们自己定义的Interceptor已经设置完成,如果想使用则可以用annotation指定。如
@InterceptorRefs({
@InterceptorRef("loginInterceptor"),
@InterceptorRef("defaultStack")
})
@ParentPackage(value="struts-interceptor")
@Namespace(value="/application")
@Result(name="input",location="/application/login.jsp")
public class LoginAction extends BaseAction
{
private static final long serialVersionUID = 1L;
}
我们在LoginAction里使用了刚刚自定义的Interceptor。
官网教程提供的解决方案:
引用
If you get errors like "Unable to find interceptor class referenced by ref-name XYZ". This means that the package where Convention is placing your actions, does not extend the package where the interceptor is defined. To fix this problem either 1)Use @ParentPackage annotation(or struts.convention.default.parent.package) passing the name of the package that defines the interceptor, or 2) Create a package in XML that extends the package that defines the interceptor, and use @ParentPackage(or struts.convention.default.parent.package) to point to it.
分享到:
相关推荐
Struts2.18是Apache Struts框架的一个版本,它是一个基于MVC(Model-View-Controller)设计模式的开源Java Web应用框架。这个框架的主要目的是为了帮助开发者构建结构清晰、易于维护的Web应用程序。在"struts2.18 ...
Struts2.18是Apache Struts框架的一个版本,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts2在Web开发领域中扮演着重要的角色,因为它提供了一种结构化的、可扩展的方式来组织和控制...
Struts2.18是一个非常重要的Java Web框架的版本,由Apache软件基金会开发并维护。Struts2作为MVC(模型-视图-控制器)架构的一部分,极大地简化了基于Java的Web应用程序的开发过程。这个"struts2.18jar包"包含了所有...
Struts 2.18 是该框架的一个稳定版本,提供了许多改进和新功能,例如增强了拦截器(Interceptor)机制,支持更多的数据绑定选项,以及更好的错误处理能力。在项目中,Struts 2 可能用于处理HTTP请求,控制业务流程,...
本压缩包提供了在Struts2中使用JSON所需的全部jar包,特别适用于支持struts2.18及更高版本的应用,确保了良好的向下兼容性。 首先,我们需要了解JSON(JavaScript Object Notation)的基本概念。JSON是一种数据交换...
在描述中提到的`struts2.18`指的是Struts 2框架的版本号,这通常代表了该框架的一次重大更新或改进。 在Java Web开发中,JAR(Java Archive)文件是一种归档格式,它集合了多个类文件和其他资源,使得开发者可以将...
在SSI项目实例中,Struts2.18被用来处理HTTP请求,控制应用程序的流程,并与视图和模型进行交互。其核心组件包括Action、Result、Interceptor等,它们协同工作以实现业务逻辑和视图的解耦。 1. **Action**:是...
描述中提到的版本为2.18,这意味着这个压缩包提供的`jar`文件是针对Struts2版本2.18的。每个新版本可能会修复已知问题、增加新功能或者优化性能。因此,确保使用与项目匹配的Struts2版本至关重要,以避免兼容性问题...
在Struts2的配置文件中,可以通过`<interceptor-stack>`标签定义拦截器栈,然后在`<action>`标签中引用这些拦截器栈。 例如: ```xml <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/>...
1. **引入依赖库**:要使用Struts2,首先需要在项目中添加一系列必要的jar包,包括但不限于`struts2-core-2.18.jar`、`xwork-core-2.16.jar`、`ognl-2.7.3.jar`、`freemarker-2.3.15.jar`和`commons-fileupload-...