<!-- pc用户中心操作,必须登录 -->
<package name="user_login" namespace="/" extends="json-default,struts-default">
<interceptors>
<interceptor name="ress" class="com.common.interceptor.ErrorInterceptor" />
<interceptor name="UserIsLogin" class="com.common.interceptor.Check_P_UserIsLogin" />
<interceptor-stack name="defaultStacks">
<interceptor-ref name="ress"></interceptor-ref>
<interceptor-ref name="UserIsLogin"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<global-results>
<result name="ploginUI">/WEB-INF/jsp/pc/login.jsp</result>
<result name="error">/WEB-INF/jsp/pc/404.jsp</result>
<result name="input">/WEB-INF/jsp/pc/404.jsp</result>
</global-results>
</package>
拦截器如上
注意Action配置,@ParentPackage需要设置为拦截器的package name或者继承,否则出错
出错信息为:
"Unable to find interceptor class referenced by ref-name XYZ"
因为拦截器convention扫描Action类时,没有Interceptor指定的拦截器。
处理方式为:
1使用@ParentPackage注解(或者指定struts.convention.default.parent.package)指定定义了该Interceptor的package;
2创建一个package并继承定义了该Interceptor的package,同时使用@ParentPackage(或者 struts.convention.default.parent.package)指定该package
下面附运行解决方案:
@Controller
@Scope("prototype")
@Namespace("")
@ParentPackage("user_login")
@Results(value={
@Result(name = "ann_json", type = "json",params={"root","jsonMap"}),
@Result(name = "ann_user",location = "/WEB-INF/jsp/pc/user/user.jsp"),
@Result(name = "ann_userInfo",location = "/WEB-INF/jsp/pc/user/info.jsp"),
@Result(name = "ann_registerError",location = "/WEB-INF/jsp/pc/register.jsp"),
@Result(name = "ann_login" ,location="/WEB-INF/jsp/pc/login.jsp")
})
public class PuserAction extends BaseAction<User> {
private static final long serialVersionUID = 2324932911275746283L;
//查询用户基本信息
@Action(value = "ann_info",interceptorRefs={@InterceptorRef("defaultStacks")})
public String ann_info(){
User users = (User) ActionContext.getContext().getSession().get("user");
System.out.println((null!=users)+"是否存在session");
if(null!=users){
login_user = users;
}
return "ann_userInfo";
}
}