浏览 4379 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-04-13
有一个简单的form,如下 <form action="person.action" method="POST" > person'name: <input type="text" name="name"/></br> person'age: <input type="text" name="age"/></br> <input type="submit"/> <form> 一个简单的action public class PersonAction implements Action,ModelDriven { private Person person = new Person();; public String execute(); throws Exception { return SUCCESS; } public Object getModel(); { // TODO Auto-generated method stub return person; } } 这个action很正确的解决了person的各个属性的填充,很完美.但是我有点偏执,想在action中得到一个form中的field的值,于是添加了如下的代码 ActionContext context = ActionContext.getContext();; Map params = context.getParameters();; String name =params.get("name");; System.out.println("name is " + name);; 本以为很简单的事情,却偏偏出现了问题,并且从没有从我以前的看过的教程或者帖子上得到过明显的提示,就是出现了转型异常,也就是说params.get("name")得到的不是一个String?! 于是,我更改代码 Object o =params.get("name");; System.out.println("name'class is " + o.getClass();.getName(););; 很有趣,在日志中我看到了如下的提示 INFO | jvm 1 | 2005/04/13 10:34:09 | name is [Ljava.lang.String; 我得到的不是一个String,而是一个[Ljava.lang.String(字符串数组,当时我还不知道),这是一个什么东西?!我想要的字符串去那里了?? 于是我开始了自己探索的过程,在查看一天Xwork代码无效(偶确实很笨 )的情况下,只好到ww2的老家的论坛上发贴(这么简单的问题,不敢随便在此发贴,呵呵),也不错,洋鬼子确实热心,给我的答案是 引用 "[Ljava.lang.String;" is a String array
So you can do this: String name = null; String[] names = params.get("name"); if(names != null && names.length > 0) name = names[0]; System.out.println("name is " + name); 这么简单,原来request中的找个属性是一个数组!仔细想想也确实如此,很多的情况下form的一个属性确实要传回好几个字符串,当然应当作为数组了.但是ww2却把所有的属性的传回值都作为数组了吗? 很小问题,虽然不是很难,但是在很多常见的教程或者文档上面都没有相应的提示或者说明,到底是为什么哪? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-04-14
ww是用request.getParameterValues()取数组.
|
|
返回顶楼 | |
发表时间:2005-04-14
无聊神灯 写道 ww是用request.getParameterValues()取数组.
此时的request只是一个Map吧?不会有getParameterValues()找个函数吧? 可能是笔误,但是即使是 ActionContext context = ActionContext.getContext();; Map params = context.getParameters();; ActionContext也没有这个属性函数呀? |
|
返回顶楼 | |
发表时间:2005-04-14
com.opensymphony.webwork.dispatcher.ServletDispatcher的service()方法
serviceAction(request, response, getNameSpace(request), getActionName(request), getRequestMap(request), getParameterMap(request), getSessionMap(request), getApplicationMap()); 其中getParameterMap(request)就是调用 request.getParameterMap(); 然后在方法里面处理 extraContext.put(ActionContext.PARAMETERS, parameterMap); 而context.getParameters()的方法就是一句 return (Map) get(PARAMETERS); |
|
返回顶楼 | |
发表时间:2005-04-16
这是我在一个参考上看到的,不知道作者是否亲自尝试过?
引用 我们需要在Action中取得request请求参数“username”的值:
ActionContext context = ActionContext.getContext(); Map params = context.getParameters(); String username = (String) params.get(“username”); 为了实现这个功能,我们用了三个步骤: 1、 取得我们当前的ActionContext对象context,ActionContext是个什么冬冬? 2、 从context对象里获取我们所有的请求参数,取得的却是一个Map对象params? 3、 居然可以从我们的Map对象params里获取我们需要的request请求参数“username”的值。 |
|
返回顶楼 | |
发表时间:2005-04-17
通过context.getParameters()获取的Map实例其实就相当于调用
javax.servlet.ServletRequest的方法 getParameterMap(), 而这个接口方法的明确定义是这样的: 引用 public java.util.Map getParameterMap() Returns a java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data. Returns: an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array. |
|
返回顶楼 | |
发表时间:2005-04-18
嗯,这次我们清楚了,楼上的文档说得还是比较齐全的的啦
最好还是在以后的教程里面说清楚一点,或者给个提示什么的 |
|
返回顶楼 | |