<jsp:useBean></jsp:useBean>

最近刚开始学习Java Web开发,感觉很难,可能是思维方式不同,接受能力不强。学到javaBean的时候,遇到了一个jsp:useBean的问题,纪录一下,供以后查阅学习。

什么是javaBean

百度百科:JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,long和class方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。

从百科上面的说法可以知道,规范的JavaBean,除了属性及对应的getter和setter,默认的构造函数之外,不应该包含其他的代码。

javaBean在jsp中的使用

javaBean在jsp中,可以当做普通的类使用,也可以直接用jsp标签的方式使用。

定义javaBean

首先定义一个javaBean,代码如下:

package com.test.investigation;

public class Paper {
    private String[] languages;
    private String[] technics;
    private String[] parts;

    public String[] getTechnics() {
        return technics;
    }
    public void setTechnics(String[] technics) {
        this.technics = technics;
    }
    public String[] getParts() {
        return parts;
    }
    public void setParts(String[] parts) {
        this.parts = parts;
    }

    public Paper() {
        // TODO Auto-generated constructor stub
    }
    public String[] getLanguages() {
        return languages;
    }
    public void setLanguages(String[] languages) {
        this.languages = languages;
    }
}

javaBean的初始化

首先看如下代码:

<jsp:useBean id="paper" class="com.test.investigation.Paper"></jsp:useBean>

以上代码用于初始化一个javaBean,id属性,就像是一个类的实例名,相当于在内部执行如下代码:

com.test.investigation.Paper paper = new com.test.investigation.Paper();

设置id属性,就相当于传入一个类实例的名称,而class属性则指明了该实例的类类型。

javaBean属性值的获取

javaBean属性值的获取方法如下所示:

<jsp:getProperty name="paper" property="languages"></jsp:getProperty>

同样的,name属性,与jsp:useBean标签中指定的id属性一致,property则指定了javaBean中的属性值。

设置javaBean的值

javaBean值的设置有两种,一种是指定value,一种是用request对象中的值。

指定Value

<jsp:setProperty property="languages" name="paper" value="Java"></jsp:setProperty>

当然以上代码是错误的,因为languages在javaBean中是一个数组,本人初学,不知道能不能这样给数组设置值,该代码在eclipse中报错

Cannot set indexed property

使用reqeust

使用request的方式更加简单,javaBean中的值是由其他页面传过来的,按如下使用:

<jsp:setProperty property="*" name="paper"></jsp:setProperty>

这种方式假设javaBean中的属性与request中的参数名称一致。然后对应的会将request中的参数,设置到对应的值上面去。

那么问题来了

我在学这个的时候,一直很奇怪,是不是只要和javaBean里的属性名字对应就能设置呢?于是,我修改了languages变量的名字,发现一样能成功设置,我就纳闷了。为什么我明明修改了名字,但是却还是能设置呢??于是我重新生成了getter和setter方法,这时候错误终于来了,说找不到getLanguage方法。由此可以猜测:

  1. request中的参数并不是和javaBean中的属性对应
  2. request设置javaBean参数的时候,是以request中的参数为名字,根据java中getter和setter的规则,查找对应的getter和setter方法。

我不知道我自己的想法是不是正确的,至少到目前来说,我从碰到的问题中看到的是这样的。纯属初学,如有错误,请勿见怪。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值