关于setProperty的设置
<jsp:setProperty>的属性设置可以分为四种:
1. 自动匹配:<jsp:setProperty name="实例化对象名称(id)" property="*"/>
2.指定属性:<jsp:setProperty name="实例化对象名称(id)" property="属性名称"/>
3.指定参数:<jsp:setProperty name="实例化对象名称(id)" property="属性名称" param="参数名称"/>
4.指定内容:<jsp:setProperty name="实例化对象名称(id)" property="属性名称" value="内容"/>
实例演示四种设置的应用
我们还是以上一篇文章中的程序来验证。
- biaodan.html
- <html>
- <head>
- <title>WEB开发</title>
- </head>
- <body>
- <form action="javaBean_01.jsp" method="post">
- 姓名:<input type="text" name="name"><br>
- 年龄: <input type="text" name="age"><br>
- <input type="submit" value="提交">
- <input type="reset" value="重置">
- </form>
- </body>
- </html>
- SimpleBean.java
- package javaBean01;
- public class SimpleBean {
- private String name;
- private int age;
- public SimpleBean(){
- }
- public void setName(String name){
- this.name=name;
- }
- public void setAge(int age){
- this.age=age;
- }
- public String getName(){
- return this.name;
- }
- public int getAge(){
- return this.age;
- }
- }
- SimpleBean_01.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <% request.setCharacterEncoding("gbk");%>
- <jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
- <jsp:setProperty name="simple" property="*"/>
- <h3>姓名:<%=simple.getName() %></h3>
- <h3>年龄:<%=simple.getAge() %></h3>
- </body>
- </html>
以上三个页面就是全部的代码了,现在让我们一一验证四种设置的应用。
现在希望指定属性设置内容,而其他的不希望设置内容的话,就可以将"*"换成希望设置的属性。比如现在希望name属性有内容,而age属性不给他赋值。代码如下;
- 将SimpleBean_01.jsp改成如下:
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <% request.setCharacterEncoding("gbk");%>
- <jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
- <jsp:setProperty name="simple" property="name"/>
- <h3>姓名:<%=simple.getName() %></h3>
- <h3>年龄:<%=simple.getAge() %></h3>
- </body>
- </html>
运行一下,填写姓名和年龄,提交后可以发现:姓名有内容,而年龄却为0. age属性并没有赋值。
现在希望将name参数的内容设置给age,将age参数的内容设置给name ,也就是说将name和age缓过来,可以通过param进行指定,代码如下:
- 将SimpleBean_01.jsp改成如下:
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <% request.setCharacterEncoding("gbk");%>
- <jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
- <jsp:setProperty name="simple" property="name" param="age"/>
- <jsp:setProperty name="simple" property="age" param="name"/>
- <h3>姓名:<%=simple.getName() %></h3>
- <h3>年龄:<%=simple.getAge() %></h3>
- </body>
- </html>
运行biaodan.html 在姓名上写上22,在年龄上写上赵玉强,然后提交,可以发现即使姓名和年龄写反了,结果依然可以正常输出: 姓名:赵玉强 年龄:22 (注意:这个地方字符串和整型)
如果现在不需要参数的话,也可以直接指定一个具体的内容,那么就得看value的作用了,代码如下:
- 将SimpleBean_01.jsp改成如下:
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <% request.setCharacterEncoding("gbk");%>
- <% int age=30;%>
- <jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
- <jsp:setProperty name="simple" property="name" value="赵玉强"/>
- <jsp:setProperty name="simple" property="age" value="<%=age %>"/>
- <h3>姓名:<%=simple.getName() %></h3>
- <h3>年龄:<%=simple.getAge() %></h3>
- </body>
- </html>
运行一下可以发现,无论在biaodan.html上写什么内容,结果都显示 赵玉强 30. 因为已经在
SimpleBean_01.jsp页面设置好了。
比较完这四种设置方法后,可以发现 "*" 这种方式最为方便,而且以后对于传递很多参数都很方便。
取得属性: <jsp: getProperty>
既然有<jsp:setProperty>设置属性,相应的就会有<jsp:getProperty>取得属性了。
这个标签会自动调用javaBean中的getter()方法。它的语法格式只有一种
<jsp:getProperty name="实例化对象的名称(id)" property="属性名称"/>
- 将SimpleBean_01.jsp 改成如下:
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <% request.setCharacterEncoding("gbk");%>
- <jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
- <jsp:setProperty name="simple" property="*"/>
- <h3>姓名:<jsp:getProperty name="simple" property="name"/></h3>
- <h3>年龄:<jsp:getProperty name="simple" property="age"/></h3>
- </body>
- </html>
这种标签可以直接取得属性。这种操作也使用了反射机制完成的。反射机制是这些标签的操作基础。
注意事项:
1. 要仔细比较几个代码的不同,掌握好四种设置的不同;
2. 以后只要看见了标签上出现了id的属性,则不管何种情况基本上都表示一个实例化对象,如果在标签上看见了name属性,肯定找的是属性范围中的内容,就是id指定的。如果有了property则表示的就是类中的一个属性。