出于简便,想在struts中的多个请求对应一个action实例,那我在action中如何区分不同的请求? 可在Action里设置不同的action参数,另在struts-config.xml 加上 parameter="action" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你已经深刻地理解了struts的体系,只存在一个Action实例也是没有问题的,可以把调用具体的商业bean的方法放在formbean里去。详细点说吧: action是唯一的,不过在struts-config.xml里对映的formbean是不一样的。假如有一个动作为登录(logon),formbean 为 com.xxx.struts.LogonForm,而LogonForm中除具有相关属性及set/get方法外,还是付担一部分控制流向的作用。如 public class LogonForm extends ActionForm{ private String username; private String password; ... public String logon(){ //调用一个另外的bean来验证这个用户名和口令是否合法 if (UserFactory.logon(username,password)!=null){ return "success"; } else { return "failure"; } }}上面的success 和 failure 是定义在配置文件该action中的forward. 继续上面所述。这时,在页面上的登录这个按钮对应的url就应该是:action = "logon",是和formbean中的这个方法名称一模一样的,当然区分大小写。这样的话,你可以在那个唯一的action中利用反射来自动调用该方法。解析完后利用返回的字符串来导向下一个视图。 这一个解决方法可以有效地减少action的数量,很多人看来,这样一来打破了struts的MVC体系,formbean承担了较重的视图层、控制层的责任,不过,我经过深度思考,认为它适合于小型项目的实施,从设计上讲formbean的方法利用到自身的属性,自身是高度内聚的,从重用角度来说,只有商业bean这一块是最有价值的部分,Action和formbean重用的可行性不大。 它所带来的缺点也是显而易见地:混淆试图通过阅读页面导航文件config.xml来把握整个网站流程的人的思路,颠覆已经通过了填鸭式的struts培训的初哥们的神经。所以说,小型的网站适用。hehe. 我想我是跑题了。楼主的意思可能是:将一类具有相近意义的action放在一起,比如说,同一个资源记录的修改后保存、新增后保存以及删除操作。如二楼那位兄弟所说,这正是DispatchAction所干的活儿,你可以将action从这个超类进行扩展。还需在struts-config.xml中指定令牌参数的名称。 在页面传递一个参数到action里面判断使用不同的方法,可以使用类反射机制,在配置文件里面通过action里面返回的mapping.findForward();跳转到不同的页面。对应不同的form只要在strutsconfig配置文件和页面对应的path修改即可。 不知这样可不可以JSP:<html:link page="/editSubscription.do?action=Create" paramId="username" paramName="registrationForm" paramProperty="username"> <bean:message key="registration.addSubscription"/></html:link>ACTION:String action = request.getParameter("action"); if (action == null) action = "Create";根据action的值不同,进行不同的操作 你不过就是想传递参数么,做一个隐藏域。1。在ActionForm中加一个变量和相应的get,set方法。假如叫:actionFlag2。在jsp中加一句话: <html:hidden styleId="actionFlag" name="YourFormName" property="actionFlag"/>3。递交页面的时候写一个javaScript语句付相应的值。document.YourFormName.actionFlag.value = "modify";4。Action中做相应的判断。if ("modify".equal(form.getActionFlag())) {........}5。注意你的scope要是session级别。 楼主,DispatchAction应该满足你的要求了吧。可在Action里设置不同的action参数,另在struts-config.xml 加上 parameter="action"如:jsp中<html:form path="/DBEntry.do?action=insert" method="post" /><html:form path="/DBEntry.do?action=update" method="post"/>action中public class DBEntryAction extends DispatchAction { public ActionForward insert(四个参数) { <-方法名和parameter对应。 。。 } public ActionForward update(四个参数) { 。。 }}struts-config.xml中<action path="/DBEntry" type="xxxx.DBEntryAction" parameter="action" ...> <forward name="success" path="/xxx.jsp"/></action> sagittarius1979(射手爱狮子),讲的很详细,快散分吧 DispatchAction DispatchAction DispatchAction DispatchAction DispatchActionDispatchAction DispatchActionxixi 其实很简单啊,在form里加一个hidden域,来做为识别不同操作的标志,然后在action里判断是什么然后调用不同的逻辑层处理就行了. 增,删,改,查???在struts-config.xml 里的<action>加上 parameter="method"public class loginAction extends DispatchAction{ public ActionForward add(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{ ......................}public ActionForward del(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{ ......................}public ActionForward edit(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{ ......................}public ActionForward view(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{ ......................} }例如:JSP里的<html:form action="login.do?method=add" > 正确认识使用UML类图(转) 输入的是1234,结果为何是锘?234? jsp日历...小问题 百万记录的库已经建立了索引但还是很慢,请问该如何解决呢? JDK版本兼容问题 请问在struts2里怎么用session? 用dwr的时候,在控制台打印出这样的话。我已经加了转换器了,怎么还会这样呢? 大神,net/sf/cglib/core/KeyFactory是在什么包里的,郁闷! J2EE在开发中小型应用真的比不上.Net吗? 请教更改XML的方法 应用struts写的这个简单的jsp文件为什么会报错??? 急!!!!
action是唯一的,不过在struts-config.xml里对映的formbean是不一样的。假如有一个动作为登录(logon),formbean 为 com.xxx.struts.LogonForm,
而LogonForm中除具有相关属性及set/get方法外,还是付担一部分控制流向的作用。如
public class LogonForm extends ActionForm{
private String username;
private String password;
...
public String logon(){
//调用一个另外的bean来验证这个用户名和口令是否合法
if (UserFactory.logon(username,password)!=null){
return "success";
} else {
return "failure";
} }
}上面的success 和 failure 是定义在配置文件该action中的forward.
这时,在页面上的登录这个按钮对应的url就应该是:
action = "logon",是和formbean中的这个方法名称一模一样的,当然区分大小写。这样的话,你可以在那个唯一的action中利用反射来自动调用该方法。解析完后利用返回的字符串来导向下一个视图。
这一个解决方法可以有效地减少action的数量,很多人看来,这样一来打破了struts的MVC体系,formbean承担了较重的视图层、控制层的责任,不过,我经过深度思考,认为它适合于小型项目的实施,从设计上讲formbean的方法利用到自身的属性,自身是高度内聚的,从重用角度来说,只有商业bean这一块是最有价值的部分,Action和formbean重用的可行性不大。
它所带来的缺点也是显而易见地:混淆试图通过阅读页面导航文件config.xml来把握整个网站流程的人的思路,颠覆已经通过了填鸭式的struts培训的初哥们的神经。所以说,小型的网站适用。hehe.
如二楼那位兄弟所说,这正是DispatchAction所干的活儿,你可以将action从这个超类进行扩展。
还需在struts-config.xml中指定令牌参数的名称。
JSP:
<html:link page="/editSubscription.do?action=Create" paramId="username"
paramName="registrationForm" paramProperty="username">
<bean:message key="registration.addSubscription"/>
</html:link>ACTION:
String action = request.getParameter("action");
if (action == null)
action = "Create";根据action的值不同,进行不同的操作
1。在ActionForm中加一个变量和相应的get,set方法。假如叫:actionFlag
2。在jsp中加一句话: <html:hidden styleId="actionFlag" name="YourFormName" property="actionFlag"/>
3。递交页面的时候写一个javaScript语句付相应的值。
document.YourFormName.actionFlag.value = "modify";
4。Action中做相应的判断。
if ("modify".equal(form.getActionFlag())) {
....
....}
5。注意你的scope要是session级别。
DispatchAction应该满足你的要求了吧。
可在Action里设置不同的action参数,另在struts-config.xml 加上 parameter="action"如:
jsp中
<html:form path="/DBEntry.do?action=insert" method="post" />
<html:form path="/DBEntry.do?action=update" method="post"/>action中
public class DBEntryAction extends DispatchAction {
public ActionForward insert(四个参数) { <-方法名和parameter对应。
。。
} public ActionForward update(四个参数) {
。。
}
}struts-config.xml中
<action path="/DBEntry" type="xxxx.DBEntryAction" parameter="action" ...> <forward name="success" path="/xxx.jsp"/>
</action>
DispatchAction DispatchAction
xixi
public ActionForward add(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{
............
..........
}
public ActionForward del(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{
............
..........
}
public ActionForward edit(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{
............
..........
}
public ActionForward view(ActionMapping mapping,Actionform form,HttpServletRequest,req,HttpServletResponse res)throws Exception{
............
..........
} }
例如:
JSP里的<html:form action="login.do?method=add" >