现在的位置: 首页 > 综合 > 正文

Strust2 中 Could not find action or result 原因分析及解决办法

2018年04月19日 ⁄ 综合 ⁄ 共 5976字 ⁄ 字号 评论关闭

                   最近在搞物业小区管理系统,在做收费管理这个模块时,出现了一个错误,这个错误困扰了我整个上午,问题是这样的:

运行界面后就出现了这样的错误:

  2014-07-08 14:08:53,817 WARN [org.apache.struts2.dispatcher.Dispatcher] - Could not find action or result
        There is no Action mapped for action name undefined. - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)
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 com.biyesheji.system.filter.PageFilter.doFilter(PageFilter.java:35)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)

      我的JSP页面的表单是这样的:

    <script type="text/javascript">
      function checkDailyChargeData(){
     
     var pats=/^\d+(\.\d+)?$/;
     var fee=$("#totalFee").val();
     if(pats.test(fee)){
     if($("#cardId").val()==""||$("#residentsName").val()==""||$("#propertyAddress").val()==""||$("#chargeDate").val()==""||$("#chargePersonnel").val()==""){
             alert("请填写完整数据!");
           }else{
         $.ajax({
          cache: false,
                     type: "POST",
                     url:"addDailyCharge.action",
                     data:$('#dailyChargetData').serialize(),
                     async: false,
                     success: function(data) {
                     alert("提交成功!");
                     location.reload(true);
                     },
       error: function(request) {
                     alert("提交失败,请重新填写!");
                 },
         }); 
         
          } 
     }else{
     alert("总费用中请输入相应的数字!")
     }
     
      }
</script>

       <form action="addDailyCharge.action" method="post" id="dailyChargetData">
           
            <table class=gridView id=ctl00_ContentPlaceHolder2_GridView1  style="WIDth: 100%; BORDER-COLLAPSE: collapse" cellSpacing=0 rules=all border=1>
              <tbody>
                <tr>
                  <td class=gridViewheader  scope=col colspan="6">日常收费表</td>
                </tr>
                
                <tr>
                  <td  style="width:13%">户卡编号</td>
                  <td  style="width:20%"><input type="text" id="cardId" name="dcmodel.cardId" maxlength="10" style="width:95%"></td>
                  
                  <td  style="width:13%">住户姓名</td>
                  <td  style="width:20%">
                       <input type="text" id="residentsName" name="dcmodel.residentsName" style="width:95%">
                  </td>
                  
                  <td  style="width:13%">物业地址</td>
                  <td  style="width:20%"><input type="text" id="propertyAddress" name="dcmodel.propertyAddress" style="width:95%"></td>
                  
                </tr>
                
                
                <tr>
                  <td  style="width:13%">收费日期</td>
                  <td  style="width:20%" >
                        <input type="text" name="dcmodel.chargeDate" value="" style="width:80%" align="left" id="chargeDate" >
                        <img onclick="WdatePicker({el:'chargeDate'})" src="<%=request.getContextPath() %>/js/dp/skin/datePicker.gif" width="16" height="22" align="middle"/>
                  </td>
                  
                  <td  style="width:13%">收费员</td>
                  <td  style="width:20%" >
                      <input type="text" id="chargePersonnel" name="dcmodel.chargePersonnel" style="width:95%">
                  </td>
                  
                  <td  style="width:13%">收费方式</td>
                  <td  style="width:20%" >
                        <select id="chargeType"  style="width:95%" name="dcmodel.chargeType">
                           <option value="1">现金支付</option>
                           <option value="2">银行卡支付</option>
                        </select>
                  </td>
                  
                </tr>
                
                <tr>
                  
                  
                  <td  style="width:13%">总费用</td>
                  <td  style="width:20%">
                      <input type="text" id="totalFee" name="dcmodel.totalFee" style="width:95%">
                  </td>
                   
                  <td  >备注</td>
                  
                  <td  colspan="3"><input type="text" id="chargeRemark" name="dcmodel.chargeRemark" style="width:95%"></td>
                  
                </tr>
                
                <tr>
                  <td class=gridViewheader  scope=col colspan="6"><input type="button" onclick="checkDailyChargeData()" value="提交">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重置"></td>
                </tr>
              </tbody>
            </table>
  </form>

我的action代码如下:

我的实体和模型代码:

         

         都省略了set和get方法

我的struts-dailycharge.xml配置如下:

         

     struts.xml配置如下:

   

出现这个错误后,我仔细对比了action的名字和XML文件中的路径,发现都没有问题。

于是我又清了清缓存,再一次运行界面,还是那个错误。

接着,我在网上查了查资料,发现造成这个错误的原因还有就是模型的属性和表单中的name不一样,我仔细对比了一下,发现模型的属性和form表单的name是相同的。

最后我发现实体中卡号Id我设置成主键,而且是自增长的,表单中根本就不用再填卡号。

解决方法:

         将表单中的卡号去掉,不用填写。

抱歉!评论已关闭.