Struts2拦截器的问题...

zx44y 2013-02-08 07:30:48
一个SSH2的小项目..准备是配上拦截器的。
发现配上拦截器以后...进入Action就会报空指针错。

我以为是Spring的问题,但是是可以到达Action的,但是Service类会报空指针错。



下面是Struts2配置文件的代码:

<struts>
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.action.extension" value="do"/>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="LoginInterceptor" class="LoginInterceptor" />
<interceptor-stack name="defaultInterceptor">
<interceptor-ref name="LoginInterceptor" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="LoginInterceptor" />

<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/index.jsp</result>
</global-results>

<action name="login" class="UserAction" method="LoginCheck">
<result name="success" type="redirectAction">write</result>
</action>
<action name="manage" class="ArticleAction" method="ArticleList">
<result name="success" type="freemarker">/WEB-INF/ftl/manage.ftl</result>
<action name="write" class="ArticleAction" method="ArticleWrite">
<result name="success" type="freemarker">/WEB-INF/ftl/write.ftl</result>
</action>
</action>
</struts>


拦截器代码:
@Component("LoginInterceptor")
public class LoginInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String, Object> session = invocation.getInvocationContext().getSession();
String LoginSign = (String) session.get("LoginSign");
if (null != LoginSign && LoginSign.equals("Logined")) {
System.out.println("拦截器:合法用户登录---");
String result = invocation.invoke();
return result;
} else {
System.out.println("拦截器:用户未登录---");
return Action.LOGIN;
}
}
}


登录的代码:
@Controller("UserAction")
@Scope("prototype")
public class UserAction extends BaseAction{
private static final long serialVersionUID = 1L;
private UserService userService;
public String LoginCheck(){
Author author = new Author();
author.setName(request.getParameter("username"));
author.setPassword(request.getParameter("password"));
if(userService.login(author)){
session.put("LoginSign", "Logined");
return SUCCESS;
}else{
return LOGIN;
}
}


登陆后的访问页面代码:

@Controller("ArticleAction")
@Scope("prototype")
public class ArticleAction extends BaseAction{
private static final long serialVersionUID = 1L;
private ArticleService articleService;
private CategoryService categoryService;
private String result;

public String ArticleWrite() throws Exception {
List<Category> list = categoryService.findAll();
request.setAttribute("clist", list);
return SUCCESS;
}

@Resource(name="articleService")
public void setArticleService(ArticleService articleService) {
this.articleService = articleService;
}

@Resource(name="categoryService")
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}

public String getResult() {
return result;
}

public void setResult(String result) {
this.result = result;
}
}
...全文
266 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨中的看客 2013-02-17
  • 打赏
  • 举报
回复
应该是加载下面XML配置的时候“@Component("LoginInterceptor")”还没起作用。所以造成空指针。 <interceptors> <interceptor name="LoginInterceptor" class="LoginInterceptor" /> <interceptor-stack name="defaultInterceptor"> <interceptor-ref name="LoginInterceptor" /> </interceptor-stack> </interceptors> <!-- 定义默认拦截器 --> <default-interceptor-ref name="LoginInterceptor" />
sust2012 2013-02-16
  • 打赏
  • 举报
回复
配置拦截器时把默认的拦截器也加上 <struts> <package name="struts-parent" abstract="true" extends="struts-default,json-default"> <interceptors> <interceptor name="isUserLoginInterceptor" class="com.interceptor.IsUserLoginInterceptor"> </interceptor> <interceptor-stack name="parentDefaultStack"> <interceptor-ref name="isUserLoginInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="parentDefaultStack"></default-interceptor-ref> </package> </struts>
  • 打赏
  • 举报
回复
struts配置文件不完整,package没有结束标签
yanqun123 2013-02-15
  • 打赏
  • 举报
回复
已经直到action里面了,说明struts配置没有问题,空指针异常应该来自这里:
引用
@Resource(name="articleService") public void setArticleService(ArticleService articleService) { this.articleService = articleService; }
也就是说,你的这个注解没有生效,需要的对象没有注入“private ArticleService articleService;”成员, 导致你调用它的findAll方法时抛异常,你可以在代码里面打印一下这个articleService对象,看是否为空
东方不败01 2013-02-10
  • 打赏
  • 举报
回复
struts.xml中 配置LoginInterceptor拦截器时,你在class属性里的拦截器包名写成包全名,就是加包前缀的试试?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧