SSH框架,struts2 数组表单提交,靠山无法取得数据

SSH框架,struts2 数组表单提交,后台无法取得数据。
本帖最后由 aheallen 于 2014-12-29 10:52:32 编辑
前台使用形如这样的表单:

<input type="text" name="attence[0].dept" />
<input type="text" name="attence[0].name"/>
<input type="text" name="attence[1].dept"/>
<input type="text" name="attence[1].name"/>

后台实体类

public class Attence {
    private String dept;
    private String name;

//相应的setter和getter。
}

action类里面

public Action{
    List<Attence> attence = null;
    //相应setter和getter。
    //public String execute...等
}

在表单提交后出现这样的错误:

警告: Error setting value
java.lang.NullPointerException
at ognl.internal.ClassCacheImpl.get(ClassCacheImpl.java:49)
at ognl.OgnlRuntime.getFields(OgnlRuntime.java:1572)
at ognl.OgnlRuntime.getField(OgnlRuntime.java:1593)
at com.opensymphony.xwork2.ognl.OgnlReflectionProvider.getField(OgnlReflectionProvider.java:27)
at com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer.getAnnotation(DefaultObjectTypeDeterminer.java:191)
at com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer.shouldCreateIfNew(DefaultObjectTypeDeterminer.java:159)
at com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:89)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317)
at ognl.ASTProperty.getValueBody(ASTProperty.java:114)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at ognl.SimpleNode.getValue(SimpleNode.java:258)
at ognl.ASTChain.setValueBody(ASTChain.java:222)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:234)
at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:183)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:170)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:148)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:334)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:246)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.common.filter.LoginFilter.doFilter(LoginFilter.java:48)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.common.filter.EncodingFilter.doFilter(EncodingFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)

求助,我代码里面跟了下很难确定是哪里问题,好像是找不到attence这个字段?有没有人碰到过相同的错误的。
------解决思路----------------------
List<Attence> attence = new ArrayList<Attence>();看看。
------解决思路----------------------
引用:
Quote: 引用:

这里的

public Action{
    List<Attence> attence = null;
    //相应setter和getter。
    //public String execute...等
}

改成这样的

public Action{
   private List<Attence> attence;
    //相应setter和getter。
    //public String execute...等
}

问题深度没那么浅。要不然也不会来求助。不过这个我也试过了,不行的。


这本来就是一个很简单的问题,我项目中用到了,就这样的:

<form id="planTableForm" action="${contextPath }/struts/bm/addPlan.do" method="post" onsubmit="return checkTableData();">
<div class="listFrom">
<table id="tableList">
<tbody id="addRowArea">
<tr>
<td align="center" width="5%">
<input value="1" size="3" readonly=readonly/>
</td>
<td align="center" width="10%">
<input type="text" name="planList[0].planName" id="planList[0].planName" value="" size="25" maxlength="25"/>
</td>
<td align="center" width="10%">
<s:select id="planList[0].planType" name="planList[0].planType" value="" headerKey="" headerValue="--请选择--"
                      list="#request.syscodes" listKey="code"
                      listValue="name" onchange="checkPlanType(this)"
                      cssStyle="height:20px;width:130px">
             </s:select>
</td>
<td align="center" width="10%">
<input type="text" class="Wdate" id="planList[0].finishDate" name="planList[0].finishDate" value=""
                                  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd'})" style="width:120px;" readonly=readonly/>
</td>
<td align="center" width="10%">
<input type="text" name="planList[0].jobPlace" id="planList[0].jobPlace" value="" size="20" maxlength="100"/>
</td>
<td align="center" width="10%">
<s:select id="planList[0].ownerId" name="planList[0].ownerId"  value="" headerKey="" headerValue="--请选择--"
   list="#request.workerTeams" listKey="userId" listValue="userName"
   cssStyle="height:20px;width:130px;">
</s:select>
<!--  <input type="text"  value="" size="" maxlength="18"/>-->
</td>
<td align="center" width="15%">
<input type="text" name="planList[0].unitTime" id="planList[0].unitTime" value="" size="" maxlength="100"/>
</td>
<td align="center" width="15%">
<input type="text" name="planList[0].remark" id="planList[0].remark" value="" size="" maxlength="100"/>
</td>
<td align="center" width="5%"> 
<a href="javascript:void(0);" onclick="deletePlan(this);return false;"><span>删除</span></a>
</td>
</tr>
</tbody>
</table>
<br>
</div>
<div class="buttons" align="center">
<input type="submit" class="button_blank" value="保存"/>
<input type="button" class="button_blank" value="取消" onclick="javascript:window.close();">
</div>
</form>


这里的planList在Action中这样写的:

public class PlanAction extends PomInfoAction{
private List<Plan> planList;
public List<Plan> getPlanList() {
return planList;
}

public void setPlanList(List<Plan> planList) {
this.planList = planList;
}

public String addPlan(){
try{
for(Plan p:planList){
p.setCreateUserId(this.getReh().getUserVO().getUserLongID());
p.setState(TypeConstant.PLAN_STATE_NOT_FINISH);
}
planMgr.batchAddPlan(planList);
}catch(Exception e){
logger.error(e.getMessage(),e);
}
return null;
}
}


添加都是正常的,不知道你的为什么不行,
------解决思路----------------------
项目重新部署一下~先clean项目,不行的话,直接叉叉掉,从服务器重拉代码,全新部署。包括你的web服务器清缓存等,重启电脑各种操作全上了再说。看你这架势,感觉代码没问题,可能是哪个配置或者缓存类的问题