获取请求参数

获取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数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值