1

使用攔截器時,這是我的WelcomeAction的NullPointerException在Struts 2的

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

+0

不適用於問題的上下文 –

+0

爲什麼沒有用? –

+0

我仍然無法確定爲什麼它會拋出NullPointerException.No違規我以前的評論。 –

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的功能用作參數或工作流。