在Struts 2中使用拦截器时出现NullPointerException

这是我的WelcomeAction

 package com.codinghazard.actions; public class WelcomeAction { private String operandA; private String operandB; private Character operator; private int sum; public String execute() { if ((operandA!="") && (operandB!="")) { int a=Integer.parseInt(operandA); int b=Integer.parseInt(operandB); switch (operator) { case '1': sum=a+b; break; case '2': sum=ab; break; case '3': sum=a*b; break; case '4': try { sum=a/b; } catch(ArithmeticException ae) { return "ERROR"; } break; } return "SUCCESS"; } return "ERROR"; } public String getOperandA() { return operandA; } public void setOperandA(String operandA) { this.operandA = operandA; } public String getOperandB() { return operandB; } public void setOperandB(String operandB) { this.operandB = operandB; } public Character getOperator() { return operator; } public void setOperator(Character operator) { this.operator = operator; } public int getSum() { return sum; } public void setSum(int sum) { this.sum = sum; } } 

这是我的struts.xml文件

        pages/Calculator.jsp   <%--  --%> pages/Result.jsp pages/error.jsp    

我尝试使用拦截器但是当我取消注释它时抛出NullPointerException 。 我是Struts2的新手并试图获得理解。 我是关于拦截器的主题并从本教程中学习。

Struts2框架利用通过拦截器支持其function所需的代码。 为此,核心包提供了struts-default.xml的默认配置 ,可以灵活地扩展和覆盖默认设置。 此配置在启动时加载并应用于您使用的每个操作,除非该操作具有自己的自定义设置。 如果要将这些设置用于包配置中的每个操作,则应考虑创建拦截器堆栈。 请参阅如何配置要与每个Action一起使用的拦截器 。

有关上述拦截器的完整详细信息,请查看Struts 2文档。

这是教程链接中非常有用的建议。 然而,该教程本身适用于中级或高级读者。 初学者应从入门开始 。

你得到了NullPointerException因为你没有在动作配置中引用params拦截器。 并且您应该知道,如果您为具体的动作配置引用拦截器,它将使用此拦截器而不是默认情况下使用的defaultStack ,如果动作配置没有引用拦截器。

     pages/Result.jsp pages/error.jsp  

试试上面。

每当你使用struts2的默认拦截器列表中没有的任何额外拦截器时,你必须添加默认堆栈以利用默认的inteceptos作为params或workflow。