jsp:setProperty 动作

jsp:setProperty 动作

jsp:setProperty 用来设置已经实例化的 Bean 对象的属性,有两种用法。

用法一:在 jsp:useBean 元素外面使用

jsp:useBean 元素的后面使用 jsp:setProperty,如下所示:

<jsp:useBean id="myName" ... />
<jsp:setProperty name="myName" property="someProperty" ... />Code language: HTML, XML (xml)

此时,不管 jsp:useBean 是找到了一个现有的 Bean,还是新创建了一个 Bean 实例,jsp:setProperty 都会执行。

用法二:在 jsp:useBean 元素内部使用

jsp:setProperty 放入 jsp:useBean 元素的内部,如下所示:

<jsp:useBean id="myName" ... >
    ...
    <jsp:setProperty name="myName" property="someProperty" ... />
</jsp:useBean>Code language: HTML, XML (xml)

此时,jsp:setProperty 只有在新建 Bean 实例时才会执行,如果是使用现有实例则不执行 jsp:setProperty

jsp:setProperty 属性说明

属性说明
namename 属性是必需的。它表示要设置属性的是哪个 Bean。
propertyproperty 属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果 property 的值是 *,表示所有名字和 Bean 属性名字匹配的请求参数都将被传递给相应的属性 set 方法。
valuevalue 属性是可选的。该属性用来指定 Bean 属性的值。字符串数据会在目标类中通过标准的 valueOf 方法自动转换成数字、booleanBooleanbyteBytecharCharacter。例如,booleanBoolean 类型的属性值(比如 true)通过 Boolean.valueOf 转换,intInteger 类型的属性值(比如 42)通过 Integer.valueOf 转换。valueparam 不能同时使用,但可以使用其中任意一个。
paramparam 是可选的。它指定用哪个请求参数作为 Bean 属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把 null 传递给 Bean 属性的 set 方法。因此,你可以让 Bean 自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

例如,下面的代码片断表示:如果存在 numItems 请求参数的话,把 numberOfItems 属性的值设置为请求参数 numItems 的值;否则什么也不做。

<jsp:setProperty name="orderBean" property="numberOfItems" param="numItems" />Code language: HTML, XML (xml)

如果同时省略 valueparam,其效果相当于提供一个 param 且其值等于 property 的值。进一步利用这种借助请求参数和属性名字相同进行自动赋值的思想,你还可以在 property(Bean 属性的名字)中指定 *,然后省略 valueparam。此时,服务器会查看所有的 Bean 属性和请求参数,如果两者名字相同则自动赋值。

示例代码

如:前例中 student 组件,在 setProperty 中设定的属性:

<jsp:setProperty name="student" property="classno" value="56789" />
<jsp:setProperty name="student" property="name" value="bbbb" />
<jsp:setProperty name="student" property="age" value="33" />Code language: HTML, XML (xml)

等价:<% student.setAge(33); %>

输出结果为:56789 bbbb 33

示例:指定 value 属性

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:useBean id="student" scope="page" class="cn.demo.Student" />
    <jsp:setProperty name="student" property="name" value="bamn" />
    <%=student.getName()%>
</body>
</html>Code language: HTML, XML (xml)

示例:省略 value 和 param

如果省略 value 或者 param,此时相当于 param="name"

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:useBean id="student" scope="page" class="cn.demo.Student" />
    <jsp:setProperty name="student" property="name" />
    <%=student.getName()%>
</body>
</html>Code language: HTML, XML (xml)

这个时候,当我们访问地址如下:

http://localhost:8080/WebDEMO/testbean.jsp?name=1111111111Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注