错误HTTP 500- javax.servlet.ServletException:BeanUtils.populate:NullPointerException

时间:2016-11-23 05:23:00

标签: java jsp struts apache-commons-beanutils

我明白了

javax.servlet.ServletException: BeanUtils.populate: NullPointerException

当我打开页面一段时间(约30分钟),然后点击“提交”#39;我页面上的按钮。我在StackOverflow和Googled上看过几篇关于索引的帖子,我经历过它们,试图理解和实现,但似乎没有任何帮助。这是错误截图:

HTTP Status 500 - BeanUtils.populate
type Exception report
message BeanUtils.populate
description The server encountered an internal error that prevented it from fulfilling this request.

exception
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.NullPointerException
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515)
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:428)
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:770)
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)
org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


FORM(PhaseTrackerForm.java):

private PhaseTrackerSelectApprInfo[] selectApprList;

public PhaseTrackerSelectApprInfo[] getSelectApprList() {

    return selectApprList;
}

public void setSelectApprList(PhaseTrackerSelectApprInfo[] selectApprList) {
    this.selectApprList = selectApprList;

}


FORM(PhaseTrackerSelectApprInfo):

private String dbName;
private String schemaName;
private String serviceName;
private String action;
private String phase2MoveDate;
private String approverProfileId;
private ArrayList approverList;




public String getDbName() {
    return dbName;
}

public void setDbName(String dbName) {
    this.dbName = dbName;
}

public ArrayList getApproverList() {
    return approverList;
}

public void setApproverList(ArrayList approverList) {
    this.approverList = approverList;
}

public String getApproverProfileId() {
    return approverProfileId;
}

public void setApproverProfileId(String approverProfileId) {
    this.approverProfileId = approverProfileId;
}

public String getSchemaName() {
    return schemaName;
}


public void setSchemaName(String schemaName) {
    this.schemaName = schemaName;
}

public String getServiceName() {
    return serviceName;
}


public void setServiceName(String serviceName) {
    this.serviceName = serviceName;
}

public String getAction() {
    return action;
}

public void setAction(String action) {
    this.action = action;
}

public String getPhase2MoveDate() {
    return phase2MoveDate;
}

public void setPhase2MoveDate(String phase2MoveDate) {
    this.phase2MoveDate = phase2MoveDate;
}


JSP代码:

<logic:iterate id="selectApprList" name="phaseTrackerForm"   indexId="i" property="selectApprList" type="com.cisco.rdac.info.PhaseTrackerSelectApprInfo">

    <bean:define id="myOptions" name="selectApprList" property="approverList" type="java.util.Collection"/>

        <tr>
            <td >
                <bean:write name="selectApprList" property="dbName"/>
            </td>
            <td >
                <bean:write name="selectApprList" property="schemaName"/>
            </td>
            <td >
                <bean:write name="selectApprList" property="serviceName"/>
            </td>
            <logic:equal name="moveTo" value="phase2" >
                <td>
                    <bean:write name="selectApprList" property="action"/>
                </td>
                <td>
                    <logic:empty name="selectApprList" property="phase2MoveDate">
                        N/A
                    </logic:empty>
                    <logic:notEmpty name="selectApprList" property="phase2MoveDate">
                        <bean:write name="selectApprList" property="phase2MoveDate"/>
                    </logic:notEmpty>
                </td>
            </logic:equal>
            <td >
              <html:select indexed="true" name="selectApprList" property="approverProfileId" style="font-size: 90%;">
                <html:options collection="myOptions" property="value" labelProperty="label" />
              </html:select>
            </td>
        </tr>
    </logic:iterate>


struts-config.xml映射:

<action
     name="phaseTrackerForm"
     path="/phaseTracker"
     scope="session"
     parameter="methodToCall"
     validate="true"
     input="/WEB-INF/pages/jsp/phaseTrackerInfoPage.jsp"
     type="com.test.actions.PhaseTrackerAction">
     <forward name="phaseTrackerRequest" path="/WEB-INF/pages/jsp/phaseTrackerInfoPage.jsp" />
     <forward name="phaseTrackerSelectAppr" path="/WEB-INF/pages/jsp/phaseTrackerSelApprPage.jsp" />
     <forward name="sameApprover" path="/WEB-INF/pages/jsp/phaseTrackerSelSameApprPage.jsp" />
     <forward name="phaseTrackerSubmit" path="/WEB-INF/pages/jsp/phaseTrackerSubmittedPage.jsp" />
</action>


我理解索引getter和setter,但selectApprListlogic:iterate标记和PhaseTrackerSelectApprInfo数组的ID。我认为这个数组类型应该可以工作,但无论如何我都会得到错误。我是 Struts 的新手并且正在维护此代码,因此无法进行任何重大更改。

不知道我错过了什么。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

selectApprList is the id of logic:iterate tag。并不重要,但重要的是它是select标记的名称。看看你的代码,我找不到这个属性的getter和/或它所包含的对象的getter。

您可以找到here的类似问题。

  

现在的问题是,新实例是否准备好处理设置   您的ArrayList字段上的值? Struts不会实例化该列表   对你来说,它不会知道如何。所以确保Struts时   访问你的ActionForm,ArrayList已经存在。