`
tellixu
  • 浏览: 66961 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP中动作

    博客分类:
  • J2EE
阅读更多

    提起Jsp的动作,第一感觉是麻烦,第二感觉是用处不大。但是我们二期的考试题中又非常多,很多人提起UseBean setProperty getProperty就感觉头大。现在我们来总结一下:

其实jsp中使用动作并不难我们给一个例子看看:

    我们有一个com.xaccp.vo.ProductBean 类:

   

    在定义Bean时,注意:

1、 必须有一个默认的构造函数。

2、 属性要有getter,setter方法。

3、 get,set方法中不能出现如getPName(),setPName(…)的现象,命名要符合规范,但是get,set后面仅接着有2个大写字母时,经常在自省时出现异常。具体的原因不太清楚。

    在test1.jsp中,我们有如下代码:

    ……

<!--

useBean 动作这里可以看作为:

ProductBean pro=new ProductBean,

其实有更大的作用,在useBean中还有一个属性 scope,scope属性有四个值分别是:

page,request,session,application,默认是page,我们以session为例进行说明:

<jsp:useBean id="pro" class="com.xaccp.vo.ProductBean" scope="session"/>

相当于java代码:

ProductBean pro=(Product)session.getAttribute("pro" );

if (pro==null)

{

pro=new ProductBean();

session.setAttribute("pro",pro);

}

因此在bean中必须有默认构造方法。

-->

<jsp:useBean id="pro" class="com.xaccp.vo.ProductBean"/>

<!--

调用对象pro的set方法对pro进行赋值:

实质就是对标准范围中键pro对应的对象进行操作。

下面的代码相当于:

ProductBean pro=(ProductBean)pageContext.getAttribute(“pro”);

If (pro==null)

{

pro=request.getAttribute(“pro”);

if (pro==null)

{

pro=session.getAttribute(“pro”);

if (pro==null)

{

pro=application.getAttribute(“pro”);

}

}

}

pro.setPname(name1);

pro.setPrice(168);

-->

<jsp:setProperty name="pro" property="pname" value="name1"/>

<jsp:setProperty name="pro" property="price" value="168"/>

<!—

该方法同样的道理,也是先从标准范围中取到pro对象,再调用pro的get方法。Pro是对应的标准范围中的键。

-->

pname:<jsp:getProperty name="pro" property="pname"/>

<br/>

price:<jsp:getProperty name="pro" property="price"/>

……

    因此可以看出useBean,setProperty,getProperty的动作是没有联系的,只不过经常在一起使用而已。他们只是对标准范围的操作而已。也就是说<jsp:getPropery>,<jsp:setProperty>,<jsp:useBean>只是对标准范围(pageContext,request,session,application)进行操作而已。相互间的联系也仅仅是通过标准范围进行联系。因此我们可以手工在java代码中放入标准范围一个对象,比如在servlet中:

    request.getSession().setAttribute(“pro”,new ProductBean());

    然后在jsp页面中就可以进行<jsp:getPropery>,<jsp:setProperty>操作了,当然这时在jsp界面中放入<jsp:useBean>主要是防止NullPointerException而已。

    此外,在<jsp:setProperty>中的功能不仅如此,它还具有接收请求参数的功能。比如,在test.jsp中有如下代码:

    <a href=”test1.jsp?name=name1&price=168”>测试一下</a>

我们把test1.jsp做如下修改:

<jsp:useBean id="pro" class="com.xaccp.vo.ProductBean"/>

<jsp:setProperty name="pro" property="pname" param="name"/>

<jsp:setProperty name="pro" property="price" param=”price”/>

pname:<jsp:getProperty name="pro" property="pname"/>

<br/>

price:<jsp:getProperty name="pro" property="price"/>

那么我们从test1.jsp页面进入test.jsp中时就会显示test1.jsp请求过来的值。我们可以看到把属性value换成param,属性param的值就是请求的参数名。

在上面的示例中我们看到:

<jsp:setProperty name="pro" property="price" param=”price”/>

中property属性与param属性的值是相同的,这时候我们就可以省略属性param,test1.jsp变成这样:

<jsp:useBean id="pro" class="com.xaccp.vo.ProductBean"/>

<jsp:setProperty name="pro" property="pname" param="name"/>

<jsp:setProperty name="pro" property="price"/>

   <!—省略了属性param=”price” -->

pname:<jsp:getProperty name="pro" property="pname"/>

<br/>

price:<jsp:getProperty name="pro" property="price"/>

    我们得到启示,把test.jsp中的请求参数修改一下,让参数name修改为pname与test1.jsp中<jsp:setProperty>的property的值相同。我们就可以把test.jsp修改为:

<a href=”test1.jsp?pname=pname1&price= 168”>测试一下</a>

同时我们把test1.jsp修改为:

<jsp:useBean id="pro" class="com.xaccp.vo.ProductBean"/>

<jsp:setProperty name="pro" property="pname"/>

<!—省略了 param="name" -->

<jsp:setProperty name="pro" property="price"/>

<!—省略了属性param=”price” -->

pname:<jsp:getProperty name="pro" property="pname"/>

<br/>

price:<jsp:getProperty name="pro" property="price"/>

    到目前为止我们看到请求的参数与bean的属性是相同的,ok,我们就可以进一步把test1.jsp简化为:

<jsp:useBean id="pro" class="com.xaccp.vo.ProductBean"/>

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

<!— 全部匹配,就可以进一步的简化-->

pname:<jsp:getProperty name="pro" property="pname"/>

<br/>

price:<jsp:getProperty name="pro" property="price"/>

 

呵呵,够了,一般的情况下初学者就开始晕了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics