<jsp:setProperty>
是 JSP 中用来设置 JavaBean 对象属性的一个标准动作元素。它的作用是将用户输入的数据或指定的值,赋给 JavaBean 对象的某个属性。在学习这个动作元素之前,首先要理解 JavaBean 的概念及其与 JSP 的关联。
1. JavaBean 简介
JavaBean 是一种可重用的 Java 组件,它通常具有以下几个特点:
- 具有私有的属性(字段),通过公共的 getter 和 setter 方法来访问这些属性。
- 有一个无参的公共构造函数。
- 可以序列化(实现
Serializable
接口)。
2. jsp:setProperty
用法详解
在 JSP 中,jsp:setProperty
通常与 jsp:useBean
一起使用。jsp:useBean
负责实例化或查找一个 JavaBean 对象,jsp:setProperty
则用于设置这个 Bean 的属性。
第一种用法:<jsp:setProperty>
在 jsp:useBean
元素外
这是较为常见的用法,适用于任何情况(无论 jsp:useBean
是否创建了一个新的 Bean 实例)。代码结构如下:
<jsp:useBean id="bean实例名" class="bean类的全限定名" scope="page|request|session|application" />
<!-- 设置 Bean 的属性 -->
<jsp:setProperty name="bean实例名" property="*" />
示例:
<jsp:useBean id="user" class="com.example.User" scope="request" />
<!-- 设置属性(将请求中的参数与 Bean 属性匹配) -->
<jsp:setProperty name="user" property="*" />
在这个例子中,jsp:useBean
会尝试在请求范围(request
)中查找名为 user
的 User
对象。如果找不到该对象,它将创建一个新的 User
实例。jsp:setProperty
随后会自动将 request
参数的值(如表单数据)设置到 User
对象的属性上。
property="*"
的含义:
property="*"
表示 JSP 将根据传入的请求参数的名称,自动匹配并赋值给 JavaBean 对象的相应属性。例如,若请求参数包含name
和age
,则 JSP 会自动调用user.setName()
和user.setAge()
。
第二种用法:<jsp:setProperty>
在 jsp:useBean
元素内
这种用法仅在 jsp:useBean
创建新的 Bean 实例时才会执行 jsp:setProperty
。如果 JSP 找到了现有的 Bean 实例,则不会执行 jsp:setProperty
。
<jsp:useBean id="bean实例名" class="bean类的全限定名" scope="page|request|session|application">
<!-- 仅在新建 Bean 实例时才会执行 -->
<jsp:setProperty name="bean实例名" property="*" />
</jsp:useBean>
示例:
<jsp:useBean id="user" class="com.example.User" scope="request">
<!-- 仅在新创建 Bean 时设置属性 -->
<jsp:setProperty name="user" property="*" />
</jsp:useBean>
在这个例子中,jsp:setProperty
仅在 user
Bean 对象首次创建时才执行。如果 user
对象已经存在(在请求范围内),那么 jsp:setProperty
不会执行。
3. property
属性的详细用法
除了 property="*"
,你也可以指定某个具体的属性:
<jsp:setProperty name="bean实例名" property="属性名" value="值" />
示例:
<jsp:setProperty name="user" property="name" value="John Doe" />
在这个示例中,setProperty
将 name
属性设置为 "John Doe"
。
使用 request 参数设置 Bean 属性
你也可以通过从请求参数中自动获取值来设置某个特定属性。例如:
<jsp:setProperty name="user" property="name" />
这将自动查找名为 name
的请求参数,并将其值设置到 user
Bean 的 name
属性中。
4. jsp:setProperty
常见用法和注意事项
-
设置单个属性: 可以为 Bean 的单个属性赋值。
<jsp:setProperty name="user" property="name" value="John" />
这会将
name
属性的值设置为"John"
。 -
自动从请求参数赋值: 如果不指定
value
,则 JSP 会从请求参数中获取相应的值。<jsp:setProperty name="user" property="age" />
这会从请求参数中获取
age
的值,并设置到 Bean 的age
属性上。 -
使用
property="*"
:property="*"
表示将请求中的所有参数与 Bean 的属性进行匹配,并设置值。只有参数名与属性名匹配时,才会进行设置。 -
Bean 对象的作用域: 你可以在不同作用域(
page
、request
、session
、application
)中查找或创建 Bean。
5. jsp:setProperty
与表单提交结合使用
这种用法通常结合表单提交的数据来设置 JavaBean 属性。以下是一个典型的场景:
HTML 表单:
<form action="process.jsp" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" value="Submit" />
</form>
JSP 处理表单数据:
<jsp:useBean id="user" class="com.example.User" scope="request" />
<jsp:setProperty name="user" property="*" />
这段代码会根据表单中提交的 name
和 age
字段的值,自动将它们设置为 User
对象的相应属性。然后,你可以通过 user.getName()
和 user.getAge()
方法获取这些值。
总结
jsp:setProperty
是 JSP 处理 JavaBean 数据的核心方式之一。它的两个常见用法分别用于不同的场景:要么总是设置 Bean 属性,要么仅在创建新实例时设置。通过结合表单输入和请求参数,jsp:setProperty
可以极大简化表单数据和 JavaBean 之间的交互流程。