精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-08-04
w_weidong 写道 slaser 写道 larlf 写道 Action同ActionForm是一一对应的啊,不同数据类型肯定会用到多个ActionForm的,这个问题你们怎么解决的啊?
这个我也经常碰到,我比较喜欢使用DispatchAction,或者由它扩展出来的自己的子类。 我的表单里面放一个隐藏字段来表示调用哪个method,一般一个action里面有很多的method,比如SAVE,LOAD,DELETE一类的。这些method不光对应于一个ActionForm,有时候会有多个。比如SAVE方法需要EDITForm,但是LIST方法需要SEARCHForm。 这样我的做法是Action类也只写一个,但是在config文件里面写上2个配置,都是一个Action class.但是url不同,ActionForm也不同: <action path="LISTXXX" type="myAction" name="searchForm"> </action> <action path="EDITXXX" type="myAction" name="EDITForm"> </action> 不知道有没有办法写到一个Action配置里面。或者更好的解决办法。 对你这种不是很赞同,这样给写配置文件觉得麻烦,而且也会多出很多不必要的form类。 如你所说的这种情况,你完全可以作为一个form,form类中有你原来的俄ditform的字段,再加上一个list对象,就完全可以解决你的问题。建议做法:将你说的editform中的字段放到一个VO对象中,然后把vo放到form中,这样感觉比较清晰,将页面元素的值传导业务层作处理也比较方便。 这样会不会过于冗余啊,我们业务有时一个模块对4个5个甚至更多表进行操作,难道遇到这些情况都放到一起? |
|
返回顶楼 | |
发表时间:2005-08-09
引用 larlf 写道: Action同ActionForm是一一对应的啊,不同数据类型肯定会用到多个ActionForm的,这个问题你们怎么解决的啊? 这个我也经常碰到,我比较喜欢使用DispatchAction,或者由它扩展出来的自己的子类。 我的表单里面放一个隐藏字段来表示调用哪个method,一般一个action里面有很多的method,比如SAVE,LOAD,DELETE一类的。这些method不光对应于一个ActionForm,有时候会有多个。比如SAVE方法需要EDITForm,但是LIST方法需要SEARCHForm。 这样我的做法是Action类也只写一个,但是在config文件里面写上2个配置,都是一个Action class.但是url不同,ActionForm也不同: java代码: <action path="LISTXXX" type="myAction" name="searchForm"> </action> <action path="EDITXXX" type="myAction" name="EDITForm"> </action> 不知道有没有办法写到一个Action配置里面。或者更好的解决办法。 个人感觉DispatchAction是针对一个action form多种方法所用的,这样在action的配置文件中parameter="method" 这个配置参数才可以用到,起到相应的功能,不知道大家还有什么更好的方法 |
|
返回顶楼 | |
发表时间:2005-08-15
究竟多少个action具体看业务逻辑了,一般添加、删除、详细、列表,都可以做放在一个action中,另建议自己继承DispatchAction,抽象项目中常用功功能写一个BaseAction,以后大家都从baseaction继承,DispathchAction有根据参数自动调用方法的功能
如:.do?method=add (method要在struts-config.xml里配一下) 则会自动调用由baseaction中add方法.这样比较清析 |
|
返回顶楼 | |
发表时间:2005-09-06
使用一个或者多个action要根据实际情况而定.一个模块一般对应一个action,而模块中的动作可以对应action中的不同method来实现.在该模块对应的不同地方的操作也可以同时使用该action.在不同动作对应不同的method实现时,可以设置隐藏语、javascript、以及按钮属性来实现
|
|
返回顶楼 | |
发表时间:2005-11-30
我们在项目中只使用一个action,这个Action的代码如下:
package net.htjs.hlwsb.web.action; import net.htjs.hlwsb.web.tools.http.WebContext; import org.apache.log4j.Logger; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.lang.reflect.Method; /** * Date: 2005-7-19<br> * 该类继承于struts的Action。系统可以只存在一个该类的对象。大大减少action的类数量。 * 它利用反射原理,根据URL来决定调用formbean的哪个方法。BeanAction大大简化了struts? * 编程模式,降低了对struts的依赖。 * <p/> * 这种新的设计思路,要求FormBean不仅具有属性操作,而且有了业务操作。 * <p/> * 注意发送请求的两种格式: * <li>在struts配置文件中使用parameter="methodName" * <li>使用URL格式 例如: /xxx/methodName.do * <li>使用URL格式 例如: /xxx/xxx.do?method=methodName * * @author <a href="mailto:yanghongjian@htjs.net">YangHongJian</a> * @version 2.0 * @since 1.4.1 */ public class BeanAction extends Action { private Logger log = Logger.getLogger(this.getClass()); /** * @param actionMapping 配置文件的映射实体 * @param actionForm 容器实体 * @param httpServletRequest 请求对象 * @param httpServletResponse 响应对象 * @return org.apache.struts.action.ActionForward 导航对象 * @throws java.lang.Exception 运行时受检异常 */ public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { String forward = "login"; try { WebContext.initialize(httpServletRequest, httpServletResponse); WebContext wec = WebContext.getWebContext(); HttpSession session = wec.getRequest().getSession(); String url=wec.getRequest().getRequestURI(); log.info("client:"+wec.getRequest().getRemoteAddr() + " URL:" + url); if (!url.equals("/logins.do")&&!url.equals("/regedit.do")) { log.info("检查登录标识:login"); if (session.getAttribute("login") == null) { log.info("用户Session失效,重新转到登录界面"); session.invalidate(); wec.setSimpleMessage("用户Session失效,请重新登录!"); return actionMapping.findForward(forward); } } if (actionForm != null) { Method method = null; //方法 String methodName = actionMapping.getParameter(); //方法名称 if ((methodName != null) && !("*".equals(methodName))) { log.info("使用属性传递过来的方法名:" + methodName); try { method = actionForm.getClass().getMethod(methodName, null); forward = (String) method.invoke(actionForm, null); log.info("导航到:" + forward); } catch (Exception e) { log.error(e.getMessage()); } } if ((method == null) && !("*".equals(methodName))) { String paramMethod = httpServletRequest.getParameter("method"); if (paramMethod != null) methodName = paramMethod; else methodName = actionMapping.getPath(); log.info("传递的参数:" + paramMethod); log.info("传递过来的URL:" + methodName); if (methodName.length() > 1) { if (paramMethod == null) { int index = methodName.lastIndexOf("/") + 1; methodName = methodName.substring(index); log.info("使用URL路径方法名:" + methodName); } else log.info("使用URL传递过来的方法名:" + methodName); if (methodName.length() > 0) { try { method = actionForm.getClass().getMethod(methodName, null); forward = (String) method.invoke(actionForm, null); log.info("导航到:" + forward); } catch (Exception e) { log.error(e.getMessage()); } } } } log.info("client:"+wec.getRequest().getRemoteAddr()); } } catch (Exception e) { httpServletRequest.setAttribute("Exception", e); throw e; } return actionMapping.findForward(forward); } } |
|
返回顶楼 | |