问各位高手一个问题,关于oschina的架构

mrvoce 发布于 2011/12/27 14:41
阅读 461
收藏 0

OSChina有个ActionServlet,看了下源码,感觉每次对表单提交的值放入request到对应方法进行手动获取感觉比较麻烦,想进一步优化准备着手进行方法名、参数列表对应绑定数据。 

public Class MyAction{

 public String test(String name,int age,String sex){
    
   return "test";
 }

}
问题就出现了。通过jdk的api仅仅Method类只能获取到参数类型,无法获取到名称进行绑定,但是

form上来的参数的顺序是不定的,所以想通过属性名称进行值的绑定,但是查看了许多资料却无果。

各位大侠有这个需求的人们,是否有解决方法,或者是我思路错误了。以前看Spring mvc都是这样写的

比如:
@RequestMapping("listCmsPromotion")
	public String listCmsPromotion(Integer page,Short status,Short type,ModelMap map){
		
	}
红薯大哥是否觉得这里需要优化进行值的绑定呢,还是因为表单参数不是很多可以手动request.get

进行获取呢?

以下是问题补充:

@mrvoce:如果实在不行,我就来模拟Struts的数据绑定,采用成员变量形式了。 (2011/12/27 14:42)
加载中
0
红薯
红薯

我那个 RequestContext 有个 form 方法,很方便的将参数映射到 bean 里。

你这种做法,一旦参数要做调整,你又要修改 action 方法定义

0
mrvoce
mrvoce

很不好意思,没仔细看哪个RequestContent,还是红薯大哥给力。这么快回复了。不过我还有个问题请教,但是我没见着你开源的类中进行调用哦。难不成我又没仔细看到?这个是不是应该在

ActionServlet的_process的invoke之前进行调用呢?我仅仅看到你把request传递到方法里面去了。

0
mrvoce
mrvoce

case 1:

resultObject = m_action.invoke(action, req);

这个的意思是在对应的Controller层进行获取到RequestContent,来获取form方法指定进去Class获取到对应的实例?普通的就直接request获取?

红薯
红薯
这里的 req 就是 RequestContext
0
mrvoce
mrvoce

引用来自“mrvoce”的答案

case 1:

resultObject = m_action.invoke(action, req);

这个的意思是在对应的Controller层进行获取到RequestContent,来获取form方法指定进去Class获取到对应的实例?普通的就直接request获取?

这个我就这个意思,普通的例如2、3个参数直接用Request获取,如果多了就直接用RequestContent映射到Bean中形成实例。还有就是我想问问封装值传到View层你是如何做呢,request?还是有其他的机制?Spring Mvc有ModelMap、Request2中方式,准备借鉴下。

m_action.invoke(action, req.request(), req.response(),map);

我在invoke方法后面加入了个map让对应的方法增加个Map<String,Object> 这样然后循环遍历放入Request作用域,用于承载到页面去显示。不知道是否有好的方式呢?

0
红薯
红薯

oschina 没用 spring,action 不会传任何值到页面,页面想要什么值自己通过 velocity 的 toolbox 类去获取,跟 action 无关。

action 一般用来处理表单提交动作。

0
mrvoce
mrvoce

引用来自“红薯”的答案

oschina 没用 spring,action 不会传任何值到页面,页面想要什么值自己通过 velocity 的 toolbox 类去获取,跟 action 无关。

action 一般用来处理表单提交动作。

非常感谢,这么热情回答,这个我自己想想办法咯。还是得多谢。
返回顶部
顶部