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

问题描述 投票:0回答:1

我明白了

javax.servlet.ServletException: BeanUtils.populate: NullPointerException

当我让页面打开一段时间(大约 30 分钟),然后单击我页面上的“提交”按钮时。我在 StackOverflow 和 Google 上看到了一些关于索引的帖子,我浏览了它们,试图理解和实施,但似乎没有任何帮助。这是错误截图:

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 但

selectApprList
logic:iterate
标签和
PhaseTrackerSelectApprInfo
数组的 ID。我认为这种数组类型应该可以工作,但无论如何我都会收到错误消息。我正在使用 Struts 并致力于维护此代码,因此无法进行任何重大更改。

java jsp struts apache-commons-beanutils
1个回答
0
投票

selectApprList is the id of 
logic:iterate
tag, but it matters that it's a name of
` 标签并不重要。查看您的代码,我没有找到此属性的吸气剂和/或它包含的对象的吸气剂。

您可以找到类似的问题:

现在的问题是,新实例准备好处理setting了吗 ArrayList 字段上的值? Struts 不会实例化该列表 对你来说,它不知道该怎么做。所以确保当 Struts 访问您的 ActionForm,ArrayList 已经存在。

你可以找到一个example如何使用

<logic:iterate>
标签。

© www.soinside.com 2019 - 2024. All rights reserved.