JavaBean与表单
在JavaBean语法中,实际上最大的特点就在于与表单的交互上,读者可以回顾一下:如果按照之前的做法,有一个表单提交了内容给JSP,JSP中如果要是想进行接收的话,则需要通过request,分别进行接收,并设置到JavaBean对应的属性里。
方法一:【input_bean1.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="com.skewrain.demo.*"%>
<html>
<head><title>javabean</title></head>
<body>
<%
request.setCharacterEncoding("GBK");
SimpleBean simple = new SimpleBean();
simple.setName(request.getParameter("name"));
simple.setAge(Integer.parseInt(request.getParameter("age")));
%>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
【input_bean.htm的内容如下:】
<html>
<head><title>javabean</title></head>
<body>
<form action="input_bean.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>
执行此代码的结果如下:
“提交”之后的结果为:
此时,按照最原始的手工方式定义javabean的对象,之后使用request接收所有的参数。
这是第一种做法,全部由用户手工完成,但是现在也可以有第二种做法,通过标签完成。
Input_bean.htm内容不变。【input_bean2.jsp内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>javabean</title></head>
<body>
<% request.setCharacterEncoding("GBK"); %>
<jsp:useBean id="simple" scope="page"
class="com.skewrain.demo.SimpleBean"/>
<jsp:setProperty name="simple" property="*"/>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
执行此程序的结果如下:
“提交”之后的结果为:
通过一个<jsp:setProperty>标签就可以完成所有请求参数的自动配置,而且可以自动将输入的String型变为int型的数据,这个标签的语法如下:
<jsp:setProperty>:表示操作指定JavaBean中的属性,里面定义了两个属性:
1):name:表示的是使用JavaBean中的id的定义;
2):property:表示的是设置里面的属性内容,如果为“*”则表示自动匹配,与表单相匹配。
如果要想让表单的参数可以自动设置到JavaBean之中的话,那么就需要让参数的名称与属性一致,但是这种说法并不明确,因为在这之中还包含了一个概念。
在编写简单Java类的时候一直强调,类中的属性必须封装,封装之后的属性需要按照指定的格式编写对应的setter、getter方法。
使用这种操作,实际上最终调用的是JavaBean中的setter方法,而setter方法又有严格的命名要求,所以可以简单的理解为要想设置,则参数名称必须与属性名称一致,否则无法完成设置。
当然,这种操作的原理依然是反射机制,通过反射,可以将指定属性名称的setter方法进行调用。
但是,这种操作本身存在一个问题,即:如果要输入的内容是int型的话,则必须输入的是数字,否则会出现问题。
JavaBean的优点必须结合表单才可以体现出来。
小结:
1):通过JavaBean可以自动完成参数的设置问题;
2):完成的原理依靠的是反射机制。