iteye_20670
iteye_20670
2009-04-15 09:15
浏览 451
已采纳

Struts2 中多个问题,一个请求对应一个action 还是??

最简单的比如在用户登陆和注册两个功能,
其中涉及的成员变量都很相似,
登陆功能的成员变量有:name,password,vercode(验证码)
注册功能的成员变量有:name,password,email,···

由于没真正接触企业的实际的项目,所以问下,到底是一个功能模块对应一个请求好呢,还是类似的多个请求对应一个action

如果多个请求对应一个action 的话,那又有一些问题了。。
一个action 只能配有一个input ,如果验证错误的话,会直接跳转到input 中,但我想在登陆 验证错误的话,跳转到登陆页面,注册验证错误跳转到注册页面,这样该怎么配置好呢。。
网上有一些解决的办法是,在struts.xml 中配置多个aciton映射,但同指向一个action 中,就是加多个method 属性了。

ps:另外有个小问题,struts2中ajax 主题是不是不建议使用了,网上说效率有点差了,而如果用struts2 的ajax 主题的话,能很容易实现ajax 的效果。struts2.1x中已经把ajax 主题包放在了dojo插件了,好像有点被struts2遗弃了。实际开发中是怎样的呢??

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

13条回答 默认 最新

  • pmalex
    pmalex 2009-04-15 10:06
    已采纳

    把一类请求放到一个action里,相关的action对以请求

    一个请求对应一个action,当项目最后你会为查找action而疯狂

    我些一个基于注解的mcv例子给你看看:
    [code="java"]
    @Controller
    @RequestMapping(value="/news/*")
    public class NewsController {

    @Autowired
    NewsService newsService;
    
    public String delNews(News news,ModelMap model){
        newsService.del(news);
        return "/news/news.jsp";
    }
    
    @Autowired
    public String addNews(News news,ModelMap model){
        return "/news/news.jsp"
    }
    

    }
    [/code]

    这样子还不够,还要注意CRC原则默认大约配置,这个啥意思呢,就是你的controller,service,dao层的名字最还一致后面+controller,service,dao等,包括的你的action请求可以写成www.xxx.com/news/addNews.do; /news/delNews.do; /news/getList.do等,而news就是那个统一到的controller了,你找也方便,直接找NewsController.然后找里面的delNews,getList等方法。

    点赞 评论
  • qiao88
    qiao88 2009-04-15 09:31

    [quote]一个action 只能配有一个input [/quote]应该不是一个input吧.我用struts1.x,
    一个action 可以有多个forward啊,ajax我用的是jquery.2.0不熟悉
    建议你看看这个
    [url]http://www.iteye.com/topic/295414[/url]

    点赞 评论
  • heike1235
    heike1235 2009-04-15 09:37

    我原来的项目是一个请求对应一个action,虽然繁琐,但是很方便,容易理解。自己写过的项目也不是很多,没有更多的经验传授。

    点赞 评论
  • iteye_19016
    iteye_19016 2009-04-15 09:41

    你这项目能有多大。

    别考虑这么多, 先按自己的理解 算法 做出来。

    然后在学习重构代码。 这样学的最快。

    点赞 评论
  • iteye_19016
    iteye_19016 2009-04-15 09:43

    一个请求 准确来说

    是对应一个 action中的 某一个方法。

    你也可以以个请求 对应以个action只不过是 这个action中只有一个方法罢了。
    实际项目中 一个action是有多个方法的。

    点赞 评论
  • pmalex
    pmalex 2009-04-15 10:08

    上面的代码批注错了,看这个代码好理解点!
    [quote]
    @Controller
    @RequestMapping(value="/news/*")
    public class NewsController {

    @Autowired
    NewsService newsService;
    
    @RequestMapping(value="delNews.do")
    public String delNews(News news,ModelMap model){
        newsService.del(news);
        return "/news/news.jsp";
    }
    
    @RequestMapping(value="addNews.do")
    public String addNews(News news,ModelMap model){
        return "/news/news.jsp"
    }
    

    }
    [/quote]

    点赞 评论
  • hantsy
    hantsy 2009-04-15 10:22

    上面的spring mvc

    点赞 评论
  • pmalex
    pmalex 2009-04-15 10:30

    是的,struts,struts2都又对应的一个controller多个action的方法。
    而且struts2也开始支持注解,也是非常方便的!

    基本原则还是一样,保持CRC原则,命名统一,便于查找,同一类action尽量写到一个controller里可有又一下好处

    1、节约命名资源,新手没发现,等你开发多了就发现了这东西是如此册宝贵啊。哈哈!
    2、便于定位,便于查找。
    3、简便开发,提高开发速度

    点赞 评论
  • hantsy
    hantsy 2009-04-15 10:35

    一个 Action处理多个请求还是一个请求,没有定论,如果把这个当成一个话题,是个永远都争论不完的。
    例如一个Login或register,都可以放到一个action中处理,用两个不同的方法。但是要说的对于这种多事件的处理,Struts1, Struts2 的方法相对不够优雅,需要额外的配置(不管是Annotation还是xml配置方式),如果你了解过 Stripes 框架就会体会到这一点([url]http://www.iteye.com/news/6645-my-first-free-book-quot-stripes-quick-start-quot-officially-available-for-download[/url])。
    如何区别 input ,这个不难,在Struts2 中,针对不同方法定义不同的action url映射,这样,所有的result 都是分开的了。
    Struts ajax 是基于dojo 的,应该它集成的是 0.4,效率方面存在一定的问题,这个项目已经没有人去维护,Struts 团队明确的将它标志为过时。

    点赞 评论
  • hantsy
    hantsy 2009-04-15 10:47

    Struts 2.0 中的zero config, code behide等 Annotation插件可以算是 xml 的翻译,和 CoC 概念还是有一段距离。
    2.1 官方出了 Convention 插件,这个插件体现了convention 的一些概念,但很大程序复制了Stripes 框架的一些成果。

    Struts 2 有些地方我是不喜欢,比如ognl,功能虽然强大,但也存在问题,1.性能低下,tapestry 作者在blog报怨过,曾考虑在未来的tapestry中放弃ognl。
    2.与现有jstl体系格格不入,许多jstl taglib都可能存在兼容性问题。
    3.它的表示方法,不如jstl简洁。
    在 Convention ,Action 多事件处理,validation 方面,Struts 2 都应该向 Stripes 学习。

    点赞 评论
  • weixin_42297497
    weixin_42297497 2009-04-15 11:02

    最佳解决方案是一个action的多个method,ajax并非不能用,建议你用jquery

    点赞 评论
  • wztwzt7576
    wztwzt7576 2009-04-15 12:31

    每个请求可以提交给不同的action,然后由action中的方法来处理

    点赞 评论
  • realorg
    realorg 2009-04-15 15:14

    Struts1.2 里用一个DispatchAction 多个方法对应多个用户请求。
    Struts2.0 里也可以采用类似的方式,而且又不怕存在并发问题。

    其实关于验证的问题,个人觉得主要使用前台JS验证(不用Struts2.0 的验证框架,因为影响页面外观),后台验证也可以用 不过需要配置多个Action的映射,对每个不同映射指定 input属性。

    至于Ajax 只需要用Action就可以了,前台可以用 Prototype、JQuery、ExtJS等等。

    点赞 评论

相关推荐