继承DispatchAction报错

qwe065560 2011-07-12 06:15:12
action代码

public class MeetingAction extends DispatchAction {

public ActionForward intoIndex(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TimeConversion tc = new TimeConversion();
String dateNow = tc.getDateNow();
String num = "";
switch (tc.getDayOfWeekNow()) {
case 1:
num = "一";
break;
case 2:
num = "二";
break;
case 3:
num = "三";
break;
case 4:
num = "四";
break;
case 5:
num = "五";
break;
}
String weekNow = "每周" + num;
MeetingDAO mdao = DAOFactory.getMeetingDAOInstants();
List<MeetingVO> all = null;
try {
all = mdao.listMeetingForDate(dateNow, weekNow);
} catch (Exception e) {
LogBean.logger.error(e.getMessage());
}
request.setAttribute("list", all);
return mapping.findForward("index");
}


配置文件

<action
attribute="meetingForm"
input="/meeting/index.jsp"
name="meetingForm"
parameter="action"
path="/meeting/index"
scope="request"
type="com.anyka.meeting.action.MeetingAction">
<forward name="index" path="/meeting/index.jsp" />
</action>

跳转url:http://XX/meeting/index.do?action=intoIndex
报错

严重: Servlet.service() for servlet action threw exception
javax.servlet.ServletException: Request[/meeting/index] does not contain handler parameter named 'action'. This may be caused by whitespace in the label text.
at org.apache.struts.actions.DispatchAction.unspecified(DispatchAction.java:215)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:249)
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.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.anyka.filter.EncodingFilter.doFilter(Unknown Source)
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:859)
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:619)


哪位可以告诉我到底是为什么。。我是直接在地址栏里打上url,没有经过表单提交。。
...全文
415 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangqinhappy 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 qwe065560 的回复:]
引用 42 楼 yangxuan0418 的回复:

好吧,我说action是struts的关键字是错误的。
刚才研究了下struts的代码,发现出现直接打URL请求出异常的原因为:
以楼主的URL为例子,http://XX/meeting/index.do?action=intoIndex
是执行完intoIndex方法之后,会返回一个Forward,此返回的Forward是会以doP……
[/Quote]
我以前也出现 过这种 情况!
qingmingcom 2011-07-14
  • 打赏
  • 举报
回复
试了一下,struts1.3.10表示毫无压力,能正确执行。
你没写unspecified时不行,写了就好了,然后删掉也好了。看来是缓存问题呀。

另:parameter=action没什么问题,从request.getParameter("action")中取的值。
如果没配parameter或配了但传的参数是null,都报servlet exception;但如果配了传的参数指定的方法不存在,报的是nosuchmethod exception.
qwe065560 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 yangxuan0418 的回复:]

好吧,我说action是struts的关键字是错误的。
刚才研究了下struts的代码,发现出现直接打URL请求出异常的原因为:
以楼主的URL为例子,http://XX/meeting/index.do?action=intoIndex
是执行完intoIndex方法之后,会返回一个Forward,此返回的Forward是会以doPost方式执行。所以request中没有发现action……
[/Quote]
所以表单提交要加上method="post"
------------------------------------------------------------------------------------------------
而url直接提交现在还是个谜,现在更奇怪的事情出现了。运行成功以后即使我删除unspecified方法,程序依然正常执行,无错误
-----------------------------------------------------------------------------------------------
qwe065560 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 cbxjj 的回复:]

你确定你重写后你的intoIndex方法执行了么?
打断点试试看看进去没
调用unspecified方法会抛出异常自动跳转至input的属性
input="/meeting/index.jsp"
跳转的这个页面和你执行intoIndex方法跳转的页面一样
[/Quote]
肯定执行了。。直接访问/meeting/index.jsp是不会有数据显示的
intoIndex执行以后页面才会显示数据
qingmingcom 2011-07-14
  • 打赏
  • 举报
回复
是struts1.2么。看了一下异常堆栈上并无MeetingAction的调用呀。配置问题吧。
at org.apache.struts.actions.DispatchAction.unspecified(DispatchAction.java:215)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:249)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
qwe065560 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 zhangqinhappy 的回复:]

引用 44 楼 qwe065560 的回复:
引用 42 楼 yangxuan0418 的回复:

好吧,我说action是struts的关键字是错误的。
刚才研究了下struts的代码,发现出现直接打URL请求出异常的原因为:
以楼主的URL为例子,http://XX/meeting/index.do?action=intoIndex
是执行完intoIndex方法之后,会返回一个……
[/Quote]
看来纠结的人挺多。。。
qwe065560 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 pipi517 的回复:]

在我的action 中加入

public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
}
[/Quote]
这个没试过。不知道有什么用
qwe065560 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yangxuan0418 的回复:]

引用 4 楼 qwe065560 的回复:
引用 2 楼 jumpheightway 的回复:

not contain handler parameter named 'action'
不能正确执行需要执行的方法
也就是缺少action=方法名这个东西

如何修改呢?我action在配置文件里面是有配置的


楼主,你两个地方都改了么?
struts.xml里面 para……
[/Quote]

有区别么。。方法名只是个名字。。。我用abcd一样可以。配置文件的东西。。不要那么死板。。别人method你就全部method没用的
qwe065560 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 javamyself 的回复:]

你的action 是= index.do ?
[/Quote]
你好好看看配置文件
剑神一笑 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cbxjj 的回复:]
parameter="action" ?
我怎么记得是 method=“action”
才是这样调用的 index.do?action=intoIndex
parameter 改 method试试
[/Quote]
好吧 我记错了 无视我
yangxuan18 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yangxuan0418 的回复:]
楼主,你把action换成别的吧,用method挺好的啊。action可能会和form里面的action冲突。应该是关键字导致struts解析URL出错。
[/Quote]
刚才引用错了
yangxuan18 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qwe065560 的回复:]
引用 2 楼 jumpheightway 的回复:

not contain handler parameter named 'action'
不能正确执行需要执行的方法
也就是缺少action=方法名这个东西

如何修改呢?我action在配置文件里面是有配置的
[/Quote]

楼主,你两个地方都改了么?
struts.xml里面 parameter="action"改为 parameter="method"
url你改为:http://XX/meeting/index.do?method=intoIndex
剑神一笑 2011-07-13
  • 打赏
  • 举报
回复
parameter="action" ?
我怎么记得是 method=“action”
才是这样调用的 index.do?action=intoIndex
parameter 改 method试试
皮皮 2011-07-13
  • 打赏
  • 举报
回复
在我的action 中加入

public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
}
javamyself 2011-07-13
  • 打赏
  • 举报
回复
你的action 是= index.do ?
zn85600301 2011-07-13
  • 打赏
  • 举报
回复
parameter="action" 去掉这个参数设置
javamyself 2011-07-13
  • 打赏
  • 举报
回复
不含有叫做'action' 的处理程式叁数。 这可能由标示本文的空白所引起。
qwe065560 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 quanlei1507053 的回复:]

你的提交方式是不是post?
[/Quote]
直接用url访问方法。明显不是表单提交。。。你看清楚
quanlei1507053 2011-07-13
  • 打赏
  • 举报
回复
你的提交方式是不是post?
qwe065560 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zn85600301 的回复:]

@parameter:为当前的Action配置参数,可以在Action的execute()方法中,通过调用ActionMapping的getParameter()方法来获取参数

action的parameter参数 是这么解释的
这个parameter应该不是指的封装request里面的参数
你自己从request中获取 action参数 试试
[/Quote]
我继承的是dispatchAction.....用此url链接方法的时候就报错了。方法根本就没有执行
加载更多回复(28)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧