我们来使用jsp:setProperty了来看看:
<jsp:useBean id="person" class="domain.Person" scope="page"/> <%--指定属性名称为age--%> <jsp:setProperty name="person" property="age"/> <% System.out.println(person.getAge()); %>
也可以完成,并且代码更少,功能更强大!
- 代码更少可以直观看出来,为什么我说它功能更加强大呢?表单提交过来的数据都是字符串,在我们没有用jsp:setProperty前,我们存储设置int类型或其他非字符串类型的数据是需要强转的!但是jsp:setProperty不需要我们强转,它内部自动帮我们转换了!
- 我们再来使用一下自动匹配来感受它的强大之处吧
<jsp:useBean id="person" class="domain.Person" scope="page"/> <%--property的值设置为*就代表自动匹配--%> <jsp:setProperty name="person" property="*"/> <% System.out.println(person.getAge()); System.out.println(person.getName()); %>
我们再来看一下效果:
- 看到这里,有人可能会觉得好神奇:只要设置property的值就可以将表单传递过来的数据封装到JavaBean对象中了!这究竟是这样做到的???
- 细心的朋友会发现,JavaBean的属性名称和表单的name属性设置的名称是一模一样的!
private String username ; private int age; 用户名:<input type="text" name="username"> 年龄:<input type="text " name="age">
- 如果我设置不一样还能不能用?我们试试:表单name属性的username改成是user
用户名:<inputtype="text"name="user">
- 我们再来看看还能不能把表单的数据完整地封装JavaBean对象中
- 我们可以发现:要想能够把表单带过来的数据成功封装到JavaBean对象上,名字要一致!也就是说:JavaBean属性名要和表单的name的名称一致
- 至于原理,它是通过反射来做的,调用了内省的方法!,我们看编译后的JSP就明白了。
jsp:getProperty
- 语法:
- 该jsp行为十分简单,我们来使用一下就知道了。
<%--使用<jsp:getProperty>输出--%> <jsp:getProperty name="person" property="username"/> <jsp:getProperty name="person" property="age"/>
- 效果:
原理如下
如果文章有错的地方欢迎指正,大家互相交流。