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遗弃了。实际开发中是怎样的呢??

把一类请求放到一个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等方法。

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

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

你这项目能有多大。

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

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

一个请求 准确来说

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

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

上面的代码批注错了,看这个代码好理解点!
[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]

上面的spring mvc

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

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

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

一个 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 团队明确的将它标志为过时。

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 学习。

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

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

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

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

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