2017-04-04 87 views
0

我想通過主鍵(catCodes)顯示數據庫表中的所有行,但是我得到NullPointerException錯誤。我可以通過指定主鍵來顯示一行,但無法顯示所有行。在JSP中使用Spring MVC顯示列表

JSP:

<table class="table table-hover table-striped-rows table-bordered table-condensed"> 
        <thead> 
         <tr> 
          <td><b>Category Description</b></td> 
          <td><b>Category Audit Date</b></td> 
          <td><b>Category Audit Location</b></td> 
         </tr> 
        </thead> 
        <c:forEach var="listValue" items="${eligCatsForm.eligCats}"> 
        <tr> 
         <td> 
          <c:out value="${listValue.catDesc}" /> 
         </td> 
         <td> 
          <c:out value="${listValue.catAuditDate}" /> 
         </td> 
         <td> 
          <c:out value="${listValue.catAuditLocation}" /> 
         </td> 
        </tr> 
        </c:forEach> 
       </table> 

控制器:

@ActionID(action = ActionTypes.NO_LOG) 
@RequestMapping(value ="displayEligCats",method = RequestMethod.GET) 
@PreAuthorize("hasAnyRole('ROLE_EMS_NOTE_VIEWER','ROLE_EMS_NOTE_USER','ROLE_EMS_NOTE_UPDATE_USER')") 
public String displayEligCats(@RequestParam(value="catCode", required=false) Long catCode, Model model) { 

    try { 

    List<EligibilityCategories> eligCats = eligibilityCategoriesService.getEligCats(catCode); 
    EligibilityCategoriesForm eligCatsForm = new EligibilityCategoriesForm(); 
    eligCatsForm.setEligCats(eligCats); 

    model.addAttribute("eligCatsForm", eligCatsForm); 

    logger.debug("Exiting AdminReviewController.displayEligNotes"); 
    return WebConstants.RETURN_ELIG_CATS; 

    } catch (Exception e) { 
     if(logger.isErrorEnabled()) 
     { 
      logger.error(e); 
     } 
     throw new ErrorException(e.getMessage()); 
    } 
} 

服務:

public interface EligibilityCategoriesService { 
List<EligibilityCategories> getEligCats(long catCode); 

}

ServiceImpl:

@Service("eligibilityCategories") 
public class EligibilityCategoriesServiceImpl implements      EligibilityCategoriesService { 

protected final Log logger = LogFactory.getLog(getClass()); 

@Autowired 
EligibilityCategoriesDao eligCatsDao; 

@Autowired 
private CoreDao coreDao; 

@Override 
public List<EligibilityCategories> getEligCats(long catCode) { 
    return eligCatsDao.getEligCats(catCode); 

} 

}

DAO:

public interface EligibilityCategoriesDao { 
final static String FIND_ELIG_CATS_BY_CAT_CODE = "EligibilityCategories.findEligCatsByCatCode"; 

List<EligibilityCategories> getEligCats(long catCode); 

}

JPA DAO:

@Repository 
public class JPAEligibilityCategoriesDao implements EligibilityCategoriesDao { 

protected final Log logger = LogFactory.getLog(getClass()); 

@PersistenceContext(unitName = "emf") 
private EntityManager entityManager; 

@Override 
public List<EligibilityCategories> getEligCats(long catCode) { 
    Query query = entityManager.createNamedQuery(FIND_ELIG_CATS_BY_CAT_CODE); 
    query.setParameter(QueryParameterConstants.QPC_CAT_CODE, catCode); 
    @SuppressWarnings("unchecked") 
    List<EligibilityCategories> eligCats = (List<EligibilityCategories>) query.getResultList(); 
    return eligCats; 
} 

}

形式:

public class EligibilityCategoriesForm { 

private Long catCode; 
private List<EligibilityCategories> eligCats; 

public Long getCatCode() { 
    return catCode; 
} 

public void setCatCode(Long catCode) { 
    this.catCode = catCode; 
} 

public List<EligibilityCategories> getEligCats() { 
    return eligCats; 
} 

public void setEligCats(List<EligibilityCategories> eligCats) { 
    this.eligCats = eligCats; 
} 

}

域:

@Entity 
@Table(name="TSEM_ELIG_CATS") 
public class EligibilityCategories implements java.io.Serializable { 
private long catCode; 
private String catDesc; 
private Integer catVerNum; 
private Long catAuditUser; 
private Date catAuditDate; 
private String catAuditAction; 
private String catAuditLocation; 

public EligibilityCategories() { 
} 

public EligibilityCategories(long catCode, String catDesc, Integer catVerNum, 
     Long catAuditUser, Date catAuditDate, String catAuditAction, 
     String catAuditLocation) { 
    this.catCode = catCode; 
    this.catDesc = catDesc; 
    this.catVerNum = catVerNum; 
    this.catAuditUser = catAuditUser; 
    this.catAuditDate = catAuditDate; 
    this.catAuditAction = catAuditAction; 
    this.catAuditLocation = catAuditLocation; 
} 

@Id 
@Column(name = "CAT_CODE", unique = true, nullable = false, precision = 10, scale = 0) 
public long getCatCode() { 
    return this.catCode; 
} 

public void setCatCode(long catCode) { 
    this.catCode = catCode; 
} 

@Column(name = "CAT_DESC", nullable = false, length = 2000) 
public String getCatDesc() { 
    return this.catDesc; 
} 

public void setCatDesc(String catDesc) { 
    this.catDesc = catDesc; 
} 

@Column(name = "CAT_VER_NUM", precision = 5, scale = 0) 
public Integer getCatVerNum() { 
    return this.catVerNum; 
} 

public void setCatVerNum(Integer catVerNum) { 
    this.catVerNum = catVerNum; 
} 

@Column(name = "CAT_AUDIT_USER", precision = 10, scale = 0) 
public Long getCatAuditUser() { 
    return this.catAuditUser; 
} 

public void setCatAuditUser(Long catAuditUser) { 
    this.catAuditUser = catAuditUser; 
} 

@Temporal(TemporalType.DATE) 
@Column(name = "CAT_AUDIT_DATE", length = 7) 
public Date getCatAuditDate() { 
    return this.catAuditDate; 
} 

public void setCatAuditDate(Date catAuditDate) { 
    this.catAuditDate = catAuditDate; 
} 

@Column(name = "CAT_AUDIT_ACTION", length = 1) 
public String getCatAuditAction() { 
    return this.catAuditAction; 
} 

public void setCatAuditAction(String catAuditAction) { 
    this.catAuditAction = catAuditAction; 
} 

@Column(name = "CAT_AUDIT_LOCATION", length = 20) 
public String getCatAuditLocation() { 
    return this.catAuditLocation; 
} 

public void setCatAuditLocation(String catAuditLocation) { 
    this.catAuditLocation = catAuditLocation; 
} 

}

任何意見將是非常有益的。我對Java和Spring很陌生,所以請不要笑。

+2

請編輯您的問題,幷包括異常堆棧跟蹤。 –

回答

0

你聲明的參數catCode爲基本類型long:

getEligCats(long catCode); 

但在Controller類參數catCode被聲明爲Long對象。

當您撥打displayEligCats獲得「所有類別」而未指定任何catCode時,其參數將爲null,並且不能將其「鑄造」爲原始類型long。

更改服務方法定義和DAO一樣的簽名:

getEligCats(Long catCode); 

而且要注意檢查catCode參數的null值。

我希望它能幫助你,再見。

+0

謝謝,它解決了錯誤,但仍然不顯示空白表的結果。我也檢查了空值。有任何想法嗎? – jimbob

+0

你必須檢查執行查詢時會發生什麼,可能是問題出在那裏。控制器和視圖似乎沒問題,發佈SQL命令,可能你還在'catCode'爲空時添加過濾參數嗎? – Alessandro