我用到了hibernate和struts框架,在提交添加时他报这个错误如下:
2009-09-25 07:52:15 [日志信息] Action[/Admin/adminNews] does not contain method named 'addNews'
java.lang.NoSuchMethodException: com.struts.action.AdminNewsAction.addNews(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
at java.lang.Class.getMethod(Unknown Source)
at org.apache.struts.actions.DispatchAction.getMethod(DispatchAction.java:347)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:255)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.shop.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
2009-09-25 07:52:15 [日志信息] Unhandled Exception thrown: class java.lang.NoSuchMethodException
2009-09-25 07:52:15 [日志信息] Servlet.service() for servlet action threw exception
java.lang.NoSuchMethodException: Action[/Admin/adminNews] does not contain specified method (check logs)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:264)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.shop.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
*****************************
这个是我的adminAddNews.jsp页面代码:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-bean" prefix="bean" %>
<%@ taglib uri="/struts-html" prefix="html" %>
<jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge"/>
<jsp:useBean id="ajax" class="com.shop.base.AjaxBean"></jsp:useBean><% JSONRPCBridge.registerObject("ajax",ajax);
%><html><head>
<title><bean:message key="admin.pageTitle"/></title><link href="../CSS/stylesheet.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="../JS/jsonrpc.js"></script>
<style type="text/css">
<!--
body {
background-color: #799AE1;
}
-->
</style>
</head>
<body>
<html:javascript formName="newsForm"/>
<html:form action="/Admin/adminNews.do?method=addNews" enctype="multipart/form-data" >
  <table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr height="40">
        <td colspan="2" class="itemTitle" align="center">
         <bean:message key="news.add.text"/>
        </td>
      </tr>
    
      <tr height="24">
        <td valign="top"  align="right"><bean:message key="news.title"/>:</td>
        <td><html:text property="title" size="41" styleClass="textBox"/></td>
     </tr>      <tr height="24">
        <td valign="top"  align="right"><bean:message key="news.content"/>:</td>
        <td><html:textarea property="content" cols="40" rows="10" styleClass="textBox"/>
  
        </td>
     </tr>
    
            
      <tr height="24">
        <td colspan="2" align="center">
<html:reset><bean:message key="reset.text"/></html:reset>
<html:submit><bean:message key="submit.text"/></html:submit>
</td>
     </tr>
      <tr>
        <td height="24" align="center" colspan="2" class="redText">
<html:errors property="addMerStatus"/>
</td>
      </tr>
    </table>
</html:form>
</body>
</html>
************************
这个是他的action方法:
public ActionForward addMer(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ActionMessages msgs = new ActionMessages();
NewsForm newsform=(NewsForm)form;
News news=new News();
NewsDAO newsdao=new NewsDAOImpl();
news.setTitle(newsform.getTitle().trim());
news.setContent(newsform.getContent().trim());
try {
boolean status =newsdao.addNews(news);
if (status){
msgs.add("addNewsStatus",new ActionMessage(Constants.ADDMER_SUC_KEY));
}else{
msgs.add("addNewsStatus",new ActionMessage(Constants.ADDMER_FAIL_KEY));
}
saveErrors(request, msgs);
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} return mapping.findForward("addNews");
}
******************
这个是数据访问层代码:
// 新增news
public boolean addNews(News news) throws Exception {
Session session = MySessionFactory.getSession();
Transaction tx = null;
boolean status = false;
try{
tx = session.beginTransaction();
session.save(news);
tx.commit();
status = true;
}catch(Exception ex){
if(tx!=null)tx.rollback();
logger.info("在执行NewsDAOImpl类中的addNews方法时出错:\n");
ex.printStackTrace();
}finally{
MySessionFactory.closeSession();
}
return status;
}
****************
请各位帮帮忙,在线等,谢谢

解决方案 »

  1.   

    com.struts.action.AdminNewsAction.addNews  方法不存在
    addNews在NewsDAO里面
    把<html:form action="/Admin/adminNews.do?method=addNews" enctype="multipart/form-data" > 
    改成<html:form action="/Admin/adminNews.do?method=addMer" enctype="multipart/form-data" > 
      

  2.   

    可能是你的addNews方法有问题,不符合action方法的规范,
    你把返回的布尔类型改成ActionForward的试试。
      

  3.   

     异常说明在你的action中没有包含addNews  方法,也就是说addNews  方法不存在,你在提交表单写入得方法不对。
      看了你的代码发现你表单提交的时候怎么会是Admin/adminNews.do?method=addNews,addNews是你的dao层的一个方法为什么硬是要扯到action中,而你action中真正进行操作的方法是addMer。
      所以将Admin/adminNews.do?method=addMer是正解