2013-07-31 44 views
1

struts.xmlStruts2的,我有一個NullPointerException異常報告

<package name="backpower" namespace="/backpower" extends="struts-default"> 
    <default-interceptor-ref name="defaultStack"></default-interceptor-ref> 
    <!-- backup battery manager --> 
    <action name="backpower" class="com.cps.backpower.action.BackpowerAction"> 
     <result name="addBattery">/WEB-INF/views/backpower/info/addBattery.jsp</result> 
     <result name="editBattery">/WEB-INF/views/backpower/info/editBattery.jsp</result> 
     <result>/WEB-INF/views/backpower/info/list.jsp</result> 
    </action> 
</package> 

add.jsp

<div class="form-actions"> 
     <button name="method:save" type="submit" class="btn btn-primary"> 
      save 
     </button> 
     <button type="reset" class="btn"> 
      reset 
     </button> 
    </div> 

BackpowerAction

public class BackpowerAction extends BaseManageAction{ 

private static final long serialVersionUID=1L; 
public BackpowerService backpowerService; 
public PaginationSupport backpowerPagination; 
public PageTip pageTip; 
public BackpowerInfo backpowerInfo; 
public Long id; 


public String execute() throws Exception{ 
    return search(); 
} 

public String search(){ 
    String hql="from BackpowerInfo where 1=1"; 
    backpowerPagination=backpowerService.getPage(hql,getPageNo(),getPageSize()); 
    return SUCCESS; 
} 

public void setBackpowerInfo(BackpowerInfo backpowerInfo){ 
    this.backpowerInfo=backpowerInfo; 
} 

public String add(){ 
    return "addBattery"; 
} 

public String save() { 
    if (backpowerInfo.getId() == null) { 
     try { 
      backpowerService.save(backpowerInfo); 
      return SUCCESS; 
     } catch (Exception e) { 
      return add(); 
     } 
    } else { 
     try { 
      backpowerService.update(backpowerInfo.getId(),backpowerInfo.getName(),backpowerInfo.getLocation(),backpowerInfo.getManager()); 
      pageTip.setOk(true); 
      pageTip.setTip("修改用戶信息成功"); 
      return search(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      pageTip.setOk(false); 
      pageTip.setTip("修改用戶信息失敗"); 
      return edit(); 
     } 
    } 

} 

public String edit() { 
    backpowerInfo=backpowerService.findById(getId()); 

    return "editBattery"; 
} 

public String del() throws Exception { 
    try { 
     backpowerService.delete(getId()); 
     pageTip.setOk(true); 
     pageTip.setTip("刪除成功"); 
    } catch (Exception e) { 
     pageTip.setOk(false); 
     pageTip.setTip("刪除失敗"); 
    } 
    return search(); 
} 

public BackpowerInfo getBackpowerInfo(){ 
    return backpowerInfo; 
} 




public PaginationSupport getBackpowerPagination(){ 

    return backpowerPagination; 
} 

public void setBackpowerPagination(PaginationSupport backpowerPagination){ 
    this.backpowerPagination=backpowerPagination; 
} 

public BackpowerService getBackpowerService(){ 
    return backpowerService; 
} 

public void setBackpowerService(BackpowerService backpowerService){ 
    this.backpowerService=backpowerService; 
} 

public PageTip getPageTip(){ 
    return pageTip; 
} 

public void setPageTip(PageTip pageTip){ 
    this.pageTip=pageTip; 
} 

public long getId(){ 
    return id; 
} 

public void setId(long id){ 
    this.id=id; 
} 
} 

顯示java.lang.NullPointerException
com.cps.backpower.action.BackpowerAction.save(BackpowerAction.java:39)

當我點擊保存網頁上的按鈕,它提供了Struts2的問題報告,我錯在哪裏,我該如何糾正?

+0

使用能否請您發佈完整的堆棧跟蹤的名字嗎? – reto

+0

你可以發佈struts錯誤嗎?空指針可能會拋出* backpowerService.update(backpowerInfo.getId(),backpowerInfo.getName(),backpowerInfo.getLocation(),backpowerInfo.getManager()); *因爲您不檢查值。 –

+1

BackpowerAction.java第39行的代碼是什麼? – orique

回答

0

名在BackpowerAction應該是相同的,在add.jsp

1

我認爲backpowerInfo在您的代碼中爲空。

在調用getter之前,您尚未填充或實例化它。

+0

在backpowerAction.save()方法中拋出NullPointerException,第39行是save()方法的第一行。你調用save()方法時,backpowerInfo爲null,但我不知道如何在它之前實例化它調用getters?@ FlorisVelleman,@ orique,@ AleksandrM – hkk

+0

@hkk:只需寫backpowerInfo = new BackpowerInfo();實例化它。 –

+0

:但我想Spring框架實例it.And下面是tomcat的日誌,我要提交有同樣的問題領域: 警告[HTTP-8888-1] OgnlValueStack.warn(49)|誤差與設定值表達式 'backpowerinfo.manager' '[Ljava.lang.String; @ 1637de8' ognl.OgnlException:目標是空值的setProperty(NULL, 「經理」,[Ljava.lang.String; @ 1637de8) – hkk

0

我想backpowerServicenull,在你的代碼計數行之後。您應該在使用前注入服務。

我看到有一個爲backpowerService二傳手,但在執行任何動作之前,它應該被稱爲。我不知道你用哪一種方式實例化一個BackpowerService bean,哪個容器和DI。但是你不用攔截器來做,因爲你的配置沒有反映它。

我的建議是使用一些DI框架,並有把你的服務豆和setter方法或字段使用@Inject注入服務的依賴,即模型BackpowerInfo的實例對象的

@Inject 
public void setBackpowerService(BackpowerService backpowerService){ 
    this.backpowerService=backpowerService; 
} 
+0

我BackpowerService在applicationContext.xml中配置如下 我認爲它是正確的,所以我不知道爲什麼backpowerInfo沒有被實例化? – hkk

相關問題