在一个Action类里放置多个execute版本遇到的问题

时间:2022-08-19 18:38:21
Action类如下(摘要): 
public class ShowStdtsAction extends ActionSupport { 
    public String execute() throws Exception { 
    System.out.println("开始执行stdtSvc.getIndependentStdts()!"); 
    ...... 
    return SUCCESS; 


//批量增加学生// 
public String addBatchStdts() throws Exception { 
    System.out.println("开始执行ShowStdtsAction.addBatchStdts()!"); 
    ...... 
    return SUCCESS; 


配置文件如下: 
<action name="showStdts" class="showStdtsAction" method="execute"> 
    <result>/stdt/showStdts.jsp</result> 
</action> 
<action name="addBatchStdts" class="showStdtsAction" method="addBatchStdts"> 
    <result>/stdt/showStdts.jsp</result> 
</action> 

我的运行环境是struts2+spring2.5+hibernate3.2。 

上面的System.out.println()是为了测试加上去的。我发现不论客户端如何发送addBachStdts.action请求,服务器根本不执行方法addBatchStdts。而且execute方法也经常出错。如果我把配置文件改成 
<action name="showStdts" class="showStdtsAction"> 
    <result>/stdt/showStdts.jsp</result> 
</action> 
删掉 
<action name="addBatchStdts" class="showStdtsAction" method="addBatchStdts"> 
    <result>/stdt/showStdts.jsp</result> 
</action> 
部分。则showStdts.action请求执行得非常正常。 

按理说一个ACTION类里应该允许不同版本的execute方法。 

百度了很久,按照网上的说法把配置改来改去,始终无法解决。

敬请哪位高人解释一下。 

10 个解决方案

#1


好像是不能有excute方法在你的action中

#2


后来我把execute方法改成别的名字了还是不行。又按照网上的方法改action的scope属性,还是不执行addBatchStdts方法,也不报错。

#3


你如果自己写了方法就不能写excute方法啦。另起个名字就可以啦!

#4


楼上,我已经把execute方法改名了。

#5


配置文件如下: 
<action name="showStdts" class="showStdtsAction" > 
   <result name="success">/stdt/showStdts.jsp </result> 
</action> 
页面调用
<a href="showStdts.action">测试1</a>
<a href="showStdts!addBatchStdts.action">测试2</a>

#6


引用 5 楼 lvkai0452 的回复:
配置文件如下: 
<action name="showStdts" class="showStdtsAction" > 
  <result name="success">/stdt/showStdts.jsp </result> 
</action> 
页面调用 
<a href="showStdts.action">测试1 </a>
<a href="showStdts!addBatchStdts.action">测试2 </a>


一、不加method参数的调用非常成功,调用的是execute方法。
二、测试2的方法我也试过,也不行。

我就纳了闷了,为啥我加了method方法就不行了,下午我再把其它相关代码贴出。

#7


Action默认只执行execute函数
要执行多个函数建议换成DispatchAction

#8


刚刚折腾了一个小时,查了一些资料,没有看到这个问题的答案,看资料过程中,我灵机一动,试着把extends ActionSupport去掉,也就是我的Action类不继承任何父类,发觉竟然可以执行不同的method了。现在又出现新的问题,上传文件失败。以前单纯用struts2上传文件一直是成功的,这次加了spring、hibernate不知怎么就失败了。传过来File变量一直为空,正在努力中。

#9


搞定上传文件不成功的问题。原HTML中的FORM代码为:
    <form action="addBatchStdts.action" enctype="multipart/form-data">
                <input type="file" name="stdts_xls" accept="*.xls"/>
                <input type="submit" name="Submit" value="上传学生名单"/>
    </form>
我加了一个method=post搞定:
    <form action="addBatchStdts.action" method="post" enctype="multipart/form-data">
                <input type="file" name="stdts_xls" accept="*.xls"/>
                <input type="submit" name="Submit" value="上传学生名单"/>
    </form>
不过我不明白的是,我上面的代码是直接从上的系统COPY过来的,上次没有method=post照样能正常上传文件。

现在出现新问题。this.getHibernateTemplate().save(stdt);语句明显执行了insert SQL,但数据库没有新记录。
下面是stdout_20080530.txt日志里的记录:
StdtID:lisi;StdtName:李四;sex:男
Hibernate: insert into STDTS (STDTNAME, SEX, PASSWD, STDTID) values (?, ?, ?, ?)
StdtID:wangwu;StdtName:王五;sex:女
Hibernate: insert into STDTS (STDTNAME, SEX, PASSWD, STDTID) values (?, ?, ?, ?)
StdtID:002;StdtName:人六;sex:女
Hibernate: insert into STDTS (STDTNAME, SEX, PASSWD, STDTID) values (?, ?, ?, ?)

继续折腾中。折腾有理,折腾万岁。

#10


没一个人回个贴?

#1


好像是不能有excute方法在你的action中

#2


后来我把execute方法改成别的名字了还是不行。又按照网上的方法改action的scope属性,还是不执行addBatchStdts方法,也不报错。

#3


你如果自己写了方法就不能写excute方法啦。另起个名字就可以啦!

#4


楼上,我已经把execute方法改名了。

#5


配置文件如下: 
<action name="showStdts" class="showStdtsAction" > 
   <result name="success">/stdt/showStdts.jsp </result> 
</action> 
页面调用
<a href="showStdts.action">测试1</a>
<a href="showStdts!addBatchStdts.action">测试2</a>

#6


引用 5 楼 lvkai0452 的回复:
配置文件如下: 
<action name="showStdts" class="showStdtsAction" > 
  <result name="success">/stdt/showStdts.jsp </result> 
</action> 
页面调用 
<a href="showStdts.action">测试1 </a>
<a href="showStdts!addBatchStdts.action">测试2 </a>


一、不加method参数的调用非常成功,调用的是execute方法。
二、测试2的方法我也试过,也不行。

我就纳了闷了,为啥我加了method方法就不行了,下午我再把其它相关代码贴出。

#7


Action默认只执行execute函数
要执行多个函数建议换成DispatchAction

#8


刚刚折腾了一个小时,查了一些资料,没有看到这个问题的答案,看资料过程中,我灵机一动,试着把extends ActionSupport去掉,也就是我的Action类不继承任何父类,发觉竟然可以执行不同的method了。现在又出现新的问题,上传文件失败。以前单纯用struts2上传文件一直是成功的,这次加了spring、hibernate不知怎么就失败了。传过来File变量一直为空,正在努力中。

#9


搞定上传文件不成功的问题。原HTML中的FORM代码为:
    <form action="addBatchStdts.action" enctype="multipart/form-data">
                <input type="file" name="stdts_xls" accept="*.xls"/>
                <input type="submit" name="Submit" value="上传学生名单"/>
    </form>
我加了一个method=post搞定:
    <form action="addBatchStdts.action" method="post" enctype="multipart/form-data">
                <input type="file" name="stdts_xls" accept="*.xls"/>
                <input type="submit" name="Submit" value="上传学生名单"/>
    </form>
不过我不明白的是,我上面的代码是直接从上的系统COPY过来的,上次没有method=post照样能正常上传文件。

现在出现新问题。this.getHibernateTemplate().save(stdt);语句明显执行了insert SQL,但数据库没有新记录。
下面是stdout_20080530.txt日志里的记录:
StdtID:lisi;StdtName:李四;sex:男
Hibernate: insert into STDTS (STDTNAME, SEX, PASSWD, STDTID) values (?, ?, ?, ?)
StdtID:wangwu;StdtName:王五;sex:女
Hibernate: insert into STDTS (STDTNAME, SEX, PASSWD, STDTID) values (?, ?, ?, ?)
StdtID:002;StdtName:人六;sex:女
Hibernate: insert into STDTS (STDTNAME, SEX, PASSWD, STDTID) values (?, ?, ?, ?)

继续折腾中。折腾有理,折腾万岁。

#10


没一个人回个贴?