这是我的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=a-b;
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
文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- http://localhost:8080/test/user/login -->
<package name="user" namespace="/user" extends="struts-default">
<action name="calculator">
<interceptor-ref name="timer" />
<result>pages/Calculator.jsp</result>
</action>
<action name="Welcome" class="com.codinghazard.actions.WelcomeAction">
<%--
<interceptor-ref name="timer" />
--%>
<result name="SUCCESS">pages/Result.jsp</result>
<result name="ERROR">pages/error.jsp</result>
</action>
</package>
</struts>
我尝试使用拦截器,但是当我取消注释它时,NullPointerException
被抛出。我是Struts2的新手并试图获得理解。我是关于拦截器和学习this教程的主题。
答案 0 :(得分:1)
Struts2框架利用interceptors支持其功能所需的代码。为此,核心软件包为struts-default.xml
中的default configuration提供了扩展和覆盖默认设置的灵活性。此配置在启动时加载,并应用于您使用的每个操作,除非该操作具有自己的自定义设置。如果要将这些设置用于包配置中的每个操作,则应考虑创建拦截器堆栈。见How do we configure an Interceptor to be used with every Action。
请查看Struts 2文档以获取上述完整详细信息 提到的拦截器。
这是本教程链接中非常有用的建议。然而,本教程本身适用于中级或高级读者。初学者应该从Getting Started开始。
你得到了NullPointerException
,因为你没有在动作配置中引用params
拦截器。你应该知道,如果你引用一个具体动作配置的拦截器,它将使用这个拦截器,而不是默认情况下使用的defaultStack
,如果动作配置没有引用拦截器。
答案 1 :(得分:0)
<action name="Welcome" class="com.codinghazard.actions.WelcomeAction">
<interceptor-ref name="timer" />
<interceptor-ref name="defaultStack"/>
<result name="SUCCESS">pages/Result.jsp</result>
<result name="ERROR">pages/error.jsp</result>
</action>
尝试上面。
每当你使用任何在struts2的默认拦截器列表中不可用的额外拦截器时,你必须明确地添加默认堆栈以将默认inteceptos的功能用作params或workflow。