您的位置:首页 > 编程语言 > Java开发

获取请求参数

2015-08-05 21:35 169 查看
获取jsp页面中提交的参数:

1、先定义好jsp页面的目标action

2、定义好method(牵涉到编码问题)

3、关于请求内容

3.1、请求内容是普通的字段(不存在级联)

3.2、存在级联(牵涉到ognl表达式)

3.3、数组内容

3.4、日期类型(这里不做详细论述)

1、jsp页面中的目标action:

注意这里的action,是给浏览器用的,所以要写全目标Uri,此时El表达式还是适用,并且“/”在这里不代表整个应用,那么应该使用
${pageContext.request.contextPath}/namespace/targetActoin


2、关于method:

这里一般表单页面,都是使用post方法,应为get方法 在地址栏中有大小限制,详细参见javaWeb的基础知识点:get/post的区别;另外,在struts2-2.1.6版本之前使用post/get方法还要进行重新编码,否则用户提交的中文数据也会乱码,这种情况,使用全站中文编码过滤器可以解决,这里有个问题就是过滤器的配置一定要在struts2的核心过滤器之前,如果在核心过滤器之后,那么一切的过滤都错过了时机。

3、获取的请求内容

3.1、是普通的字段(不存在级联):

使用struts2框架获取用户输入的数据,所获取的数据对应的字段名称要与目标动作类中对应class的setter方法中的名字要有对应,而不是其字段名。即我在表单中定义一个输入域的name=”name”,表单的
action="${pageContext.request.contextPath}/names1/addOrder.action"


那么我要获取到用户输入的name这个字段的值,框架要先到struts.xml中找到名称空间为/names1的action:addOrder。然后再找到这个action对应的class:
class="cn.anasel.domain.Order"


然后到相应的class中找到:

public void setName(String name) {

this.name = name;

}


注意:这里获取所有的字段属性,都是框架使用内省技术先通过相应的setter方法来设置的!

3.2、存在级联的字段:

级联的意思就是,我要找的那个属性,它代表的不是一个字段,而是一对象,在这个对象里面还有我需要读取到的值,在这里我用省份和城市作为例子,我在表单中我定义了省份和城市的输入域,我在设置名字时是这样 的:

<input type="text" name="address.province"/>
<input type="text" name="address.city"/>


如果我这样做了,首先说明,我在目标action对应的目标class中,设置有这样一个对象:

private Address address;


然后我肯定还设置了这个对象的getter和setter方法(这点很重要,如果这一步没有做,就读取不到,因为在设置的时候都设置不进去,拿什么来get?)

public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}


然后显而易见的是在对应的对象中,肯定有省份和城市这2个字段以及相应的getter&setter方法!

private String province;
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}


那么我输出数据的时候是在哪里输出的呢?

还是在目标class里面,因为province和city都是他们属性的属性(这个就叫级联),可以在里面直接获取。

注意:关于对象的问题-除了数组对象,其他的框架都会利用反射技术,在设置其中的属性之前创建一个新的对象!数组则不行,看下面。

3.3、获取数组内容

我拿爱好来做例子,每一个人的爱好可能有很多,所以,我们用checkbox来代表爱好,列出对我们网站需要了解的信息作为选项,这里我只用了睡觉、吃饭、阅读 - - || _or2 关于它们相关的定义如下:

<tr>
<td>爱好:</td>
<td>
<input type="checkbox" name="hobbys" value="睡觉"/>睡觉
<input type="checkbox" name="hobbys" value="吃饭"/>吃饭
<input type="checkbox" name="hobbys" value="看书"/>看书
</td>
</tr>


他们是以数组的形式传到相关的类中的,所以在目标类中我们定义的也是字符串数组,然后还是借助setter方法设置值,然后读取,就没套路啦,便利读取~~

3.4、日期类型:

这里涉及到类型转换器,暂时不讨论!(但是基本数据类型能够进行自动转换,date不可以,struts默认的是yyyy-MM-dd,遇到其他类型的就需要类型转换器)

比如我们使用到的Id,在类中我们定义的是

private Integer id;


在表单中我们定义的是:

<tr>
<td>id:</td>
<td>
<input type="text" name="id"/>
</td>
</tr>


但是最后还是能获取到用户输入的Id数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2