求教,两个不同的action写入同一个类中调用时为什么返回的是同一个页面?

hellcomer 2011-12-01 09:45:16
求问
<a href="showTeaches!teacherAlert.action?id=<s:property value='#teaches.teacherNo'/>">修改</a>
<a href="showTeaches!showTeaches.action">授课数与工作量</a>
private List teacherList;
public String showTeaches(){
teacherList = teacherService.showTeaches();
return "SUCCESS";
}

private int id;
private Teacher teacher;
public String teacherAlert(){
//System.out.println("11111111111");
teacher = teacherService.getTeacherByTN(id);
return "SUCCESS";
}


<action name="showTeaches" class="school.action.ShowTeaches">
<result name="SUCCESS">/WEB-INF/jsp/showTeaches.jsp</result>
</action>

<action name="teacherAlert" class="school.action.ShowTeaches">
<result name="SUCCESS">/WEB-INF/jsp/teacherAlert.jsp</result>
</action>
为什么返回的是同一个页面?
...全文
201 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq272936993 2011-12-03
  • 打赏
  • 举报
回复
我觉得用个例题来说明下比较实在点
首先说下:在action的名字中使用感叹号来标识要调用的方法名 eg:actionName!methodName.action
例如:我们配置类如下action
<action name="users" class="com.ibm.UserAction">...</action>
当请求/users!addUser.action时将调用UserAction的addUser()方法
现在再来看看你写的,因为你写的都是同样的actionName,却在struts.xml中有不同的两个action。

其实,不单有这一个做法,如果不好理解也可以像3楼那样指定methods,在连接的位置只写actionName就好了
hellcomer 2011-12-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 quhuafeng521 的回复:]
你的调用方法不对<a href="showTeaches!showTeaches.action">
这里调用的action是 showTeachers,只调用!号以前配置的名。所以你的配置文件只调用第一个。
你应该把两个方法的返回类型设成不一样。。第二个改成OK
<action name="showTeaches" class="school.action.ShowTeaches">
<r……
[/Quote]
正解,再多请问一句,为什么!后面的方法不自动匹配呢? 那么写后面的哪个!是不是没有意义呢?
hepeng_8 2011-12-03
  • 打赏
  • 举报
回复
返回的也面是你在配置中跟你的action中的返回值有一个对应的关系 你的返回值一样 那肯定是一个页面了
良才2015 2011-12-03
  • 打赏
  • 举报
回复
因为你这两个函数都在一个类中,也就是一个action
一个action对应一个返回值
zhouyusunquan 2011-12-02
  • 打赏
  • 举报
回复
<action name="baseMachineCrtrim_*" class="baseMachineCrtrimAction" method="{1}">
<result name="goList">/page/common/wCommon/Base_MachineCrtrim/baseMachineCrtrimQuery.jsp</result>
<result name="goEdit">/page/common/wCommon/Base_MachineCrtrim/baseMachineCrtrimEdit.jsp</result>
<result name="goAdd" >/page/common/wCommon/Base_MachineCrtrim/baseMachineCrtrimAdd.jsp</result>
<result name="goInfo">/page/common/wCommon/Base_MachineCrtrim/baseMachineCrtrimInfo.jsp</result>
</action>
哈哈哈3234 2011-12-02
  • 打赏
  • 举报
回复
相当于只用了一个action
哈哈哈3234 2011-12-02
  • 打赏
  • 举报
回复
<action name="showTeaches" class="school.action.ShowTeaches">
<result name="SUCCESS">/WEB-INF/jsp/showTeaches.jsp</result>
</action>

<action name="teacherAlert" class="school.action.ShowTeaches">
<result name="SUCCESS">/WEB-INF/jsp/teacherAlert.jsp</result>
</action>

因为你的class路径一样
quhuafeng521 2011-12-02
  • 打赏
  • 举报
回复
<action name="showTeaches" class="school.action.ShowTeaches">
这里的action指的是<a href="showTeaches!showTeaches.action">中叹号以前的。
quhuafeng521 2011-12-02
  • 打赏
  • 举报
回复
你的调用方法不对<a href="showTeaches!showTeaches.action">
这里调用的action是 showTeachers,只调用!号以前配置的名。所以你的配置文件只调用第一个。
你应该把两个方法的返回类型设成不一样。。第二个改成OK
<action name="showTeaches" class="school.action.ShowTeaches">
<result name="SUCCESS">/WEB-INF/jsp/showTeaches.jsp</result>
<result name="OK">/WEB-INF/jsp/teacherAlert.jsp</result>
</action>

应该这样。
luckyc2008 2011-12-02
  • 打赏
  • 举报
回复
同一个类吗?把两个return SUCCESS,其中一个改成其他的试试呢,比如 return "ok";配置文件也改成ok试试呢
hellcomer 2011-12-02
  • 打赏
  • 举报
回复
额,不报错的,就是返回页面不对而已。
懒到变成虫 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 quhuafeng521 的回复:]

你的调用方法不对<a href="showTeaches!showTeaches.action">
这里调用的action是 showTeachers,只调用!号以前配置的名。所以你的配置文件只调用第一个。
你应该把两个方法的返回类型设成不一样。。第二个改成OK
<action name="showTeaches" class="school.action.ShowTeaches">
……
[/Quote]

+1
cm_0914 2011-12-02
  • 打赏
  • 举报
回复
解决了吗?正确方法是哪个?
对java有感觉 2011-12-01
  • 打赏
  • 举报
回复
看起来很对啊
你debug下看看
hellcomer 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaoweiaa110 的回复:]
2楼错了,动态调用的格式是actionName!method.action,楼主没错
错的是
<action name="showTeaches" class="school.action.ShowTeaches">
<action name="teacherAlert" class="school.action.ShowTeaches">
这两个后面没有带方法method,所以两个act……
[/Quote]

<action name="showTeaches" class="school.action.ShowTeaches" method="showTeaches">
<result name="SUCCESS">/WEB-INF/jsp/showTeaches.jsp</result>
</action>

<action name="teacherAlert" class="school.action.ShowTeaches" method="teacherAlert">
<result name="SUCCESS">/WEB-INF/jsp/teacherAlert.jsp</result>
</action>

这种方式我试过了。。 结果还是不对。。 不知道具体问题在哪里。。 纠结。。。 我写的System.out.println 这个可以正确输出,证明方法调用应该是正确的。现在不知道的就是返回的时候不知道什么地方出错了。。
「已注销」 2011-12-01
  • 打赏
  • 举报
回复
2楼错了,动态调用的格式是actionName!method.action,楼主没错
错的是
<action name="showTeaches" class="school.action.ShowTeaches">
<action name="teacherAlert" class="school.action.ShowTeaches">
这两个后面没有带方法method,所以两个action都执行默认的方法excute
在里面加上method="方法名",让struts找到方法执行就可以了
fengjie926 2011-12-01
  • 打赏
  • 举报
回复
<action name="showTeaches" class="school.action.ShowTeaches" method="">
<result name="SUCCESS">/WEB-INF/jsp/showTeaches.jsp</result>
</action>
未给action 指定调用的方法,
z7227587c 2011-12-01
  • 打赏
  • 举报
回复


“ !”后面跟的是方法不是action!

上面的链接肯定只会找到showTeaches。action!

把.action去掉试试!

hellcomer 2011-12-01
  • 打赏
  • 举报
回复
顶一下。。。求问中。。。。

81,092

社区成员

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

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