<form id="form_survey" name="form1" action="saveQuestionanswer.action?questionnaireNo=<s:property value="questionnaireNo"/>" method="post" onsubmit="return ChkForm()">
<div class="name" >                        
           <b > <s:property value="questionnaireNo"/><s:property value="questionnaireName"/>                                                                    
               <s:iterator value="questionList" var="questionList" id="id" status="status">
                <ul>
                  <ol>
                     <s:property value="questionNo"/>
                     <s:property value="questionHead"/>
                  </ol>
                  <ol>
                     <s:generator separator="&$$&" val="questionBody" id="questionBody">
                             <s:i test="questionType==1">                                       
                                       <s:iterator>
                                          <s:radio name="answer[%{#status.index}]" list="#questionBody"  id="questionBody1" value="answer[%{#status.index}]" />                                                                             </s:iterator>
                                 </s:if>
                                 <s:elseif test="questionType==2">
                                     <s:iterator>
                                         <s:checkboxlist name="answer[%{#status.index}]" list="#questionBody"  value="answer[%{#status.index}]"/>                                     
                                     </s:iterator>
                                 </s:elseif>
                                 <s:elseif test="questionType==3">
                                  <s:iterator>
                                          <s:textarea name="answer[%{#status.index}]" value="textareaAnswer[%{#status.index}]"/>                                                                 
                                  </s:iterator>
                                 </s:elseif> 
                     </s:generator>
                   </ol>                
                 </ul>  
</s:iterator>                                                                        </b>  
   <br/>
</div><div class="button" align="center">
<input type="submit" value="提交问卷" name="submit1">&nbsp;&nbsp;<input type="reset" value="重新填写" name="reset1">
</div>
</form>我在action里面用我用private List answerResult = new ArrayList();
answerResult = (List)request.getAttribute("answer[%{#status.index}]");
取不到值...请问我该如何去获取answer[%{#stauts.index}]....
迭代出来的radio,如果名字相同的话,如果有多个单选题,用一个名字的话,也只有一个能被选中,其他单选题的选项不能被选.. 所以页面上只能设为name="answer[%{#status.index}]"
不胜感激报这样的错
ognl.OgnlException: target is null for setProperty(null, "0", [Ljava.lang.String;@15c44d6)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1651)
at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
at ognl.SimpleNode.setValue(SimpleNode.java:246)
at ognl.ASTChain.setValueBody(ASTChain.java:172)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
at ognl.SimpleNode.setValue(SimpleNode.java:246)
at ognl.Ognl.setValue(Ognl.java:476)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:192)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:155)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:143)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:273)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
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:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
 - Entering nullPropertyValue [target=[com.hmb.action.QuestionanswerAction@161401f, com.opensymphony.xwork2.DefaultTextProvider@3945e2], property=radioTrueAnswer]
 - Error setting value
ognl.OgnlException: target is null for setProperty(null, "6", [Ljava.lang.String;@ab436d)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1651)
at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
at ognl.SimpleNode.setValue(SimpleNode.java:246)
at ognl.ASTChain.setValueBody(ASTChain.java:172)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
at ognl.SimpleNode.setValue(SimpleNode.java:246)
at ognl.Ognl.setValue(Ognl.java:476)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:192)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:155)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:143)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:273)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)ognl.OgnlException: target is null for setProperty(null, "5", [Ljava.lang.String;@105a248)
iteratoraction

解决方案 »

  1.   

    楼主answer是action中的数组吗?
    action中(List)request.getAttribute("answer[%{#status.index}]"); answer[%{#status.index}]它表示这样的一个字符串了。 
    楼主你还是想想你的name等于什么值好。
      

  2.   


    我想了很久,name的值只能这样子设,因为radio是从迭代中出来的,不能同名,只能用索引,但是用索引后,我就无法取到值
      

  3.   

    <s:i test="questionType==1">                                       
                                           <s:iterator>
                                              <s:radio name="answer[%{#status.index}]" list="#questionBody"  id="questionBody1" value="answer[%{#status.index}]" />                                                                             </s:iterator>
                                     </s:if>
                                     <s:elseif test="questionType==2">
                                         <s:iterator>
                                             <s:checkboxlist name="answer[%{#status.index}]" list="#questionBody"  value="answer[%{#status.index}]"/>                                     
                                         </s:iterator>
                                     </s:elseif>
                                     <s:elseif test="questionType==3">
                                      <s:iterator>
                                              <s:textarea name="answer[%{#status.index}]" value="textareaAnswer[%{#status.index}]"/>                                                                 
                                      </s:iterator>
                                     </s:elseif> 
    需要看下你页面具体是什么样的效果。
      

  4.   

    就是单选题、多选题。如果radio名字固定的话,就会导致整个页面只有一个radio被选中,其他单选题的radio未被选中
      

  5.   

    那楼主你js吧,在前台提交的时候遍历所有的选择题,然后按顺序拼接成string,后台在分成数组。
      

  6.   

    jsp:
    <s:iterator var="q" status="status"> <s:textarea cols="50" rows="3" name="%{'answer['+#status.index+'].questionBody'}" theme="simple"/> </s:iterator>action:
    private List<Question> answer = new ArrayList<Question>(); 
    public List<Question> getAnswer() {
    return answer;
    }
    public void setAnswer(List<Question> answer) {
    this.answer = answer;
    }Question类里有questionBody字段,提供get和set方法