⑸jsp:setProperty,设置Bean中的属性值
在面板上点击jsp:setProperty图标,如图10所示。
当点击jsp:setProperty图标以后,出现以下对话框,如图11所示:
如图11上,可以在Bean Id方框上选择已经在<jsp:useBean>中创建的Bean实例的名字,在这个例子中选择bean1,以及在Property方框中填入“property1”。 IBM Java Server Pages插件就自动产生以下的语句:
<jsp:setProperty name="bean1" property="property1" value="" />
<jsp:setProperty>元素使用Bean给定的setter方法,在Bean中设置一个或多个属性值。你在使用这个元素之前必须得使用<jsp:useBean>声明此Bean.因为,<jsp:useBean>和<jsp:setProperty>是联系在一起的,同时这他们使用的Bean实例的名字也应当相匹配(就是说,在<jsp:setProperty>中的name的值应当和<jsp:useBean>中id的值相同) ,在前面我们已经在<jsp:useBean>声明了Bean为bean1。
你能使用多种方法利用<jsp:setProperty>来设定属性值:通过用户输入的所有值(被做为参数储存中request对象中)来匹配Bean中的属性;也可以通过用户输入的指定的值来匹配Bean中指定的属性;还可以在运行时使用一个表达式来匹配Bean的属性。
属性及其用法
name="bean1",表示已经在<jsp:useBean>中创建的Bean实例的名字.
property="*",储存用户在Jsp输入的所有值,用于匹配Bean中的属性。在Bean中的属性的名字必须和request对象中的参数名一致.。
从客户传到服器上的参数值一般都是字符类型 ,这些字符串为了能够在Bean中匹配就必须转换成其它的类型,下面的表中列出了Bean属性的类型以及他们的转换方法.
把字符串转化为其它类型的方法
boolean or Boolean
java.lang.Boolean.valueOf(String)
byte or Byte
java.lang.Byte.valueOf(String)
char or Character
java.lang.Character.valueOf(String)
double or Double
java.lang.Double.valueOf(String)
integer or Integer
java.lang.Integer.valueOf(String)
float or Float
java.lang.Float.valueOf(String)
long or Long
java.lang.Long.valueOf(String)
如果request对象的参数值中有空值,那么对应的Bean属性将不会设定任何值。同样的,如果Bean中有一个属性没有与之对应的Request参数值,那么这个属性同样也不会设定。
property="propertyName" [ param="parameterName" ],使用request中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean的属性名,param指定request中的参数名.
如果bean属性和request参数的名字不同,那么你就必须得指定property和param ,如果他们同名,那么你就只需要指明property就行了.
如查参数值为空(或未初始化),对应的Bean属性不被设定.
property="propertyName" value="{string | <%= expression %>}"
使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(查看上面的表).如果它是一个表达式,那么它类型就必须和它将要设定的属性值的类型一致。
如果参数值为空,那么对应的属性值也不会被设定。另外,你不能在一个<jsp:setProperty>中同时使用param和value。
这里值得指出的一个技巧是如果你使用了property="*",那么Bean的属性没有必要按Html表单中的顺序排序。
||||||⑹jsp:getProperty, 获取Bean的属性值,用于显示在页面中。< jsp:getProperty> 中的 name 属性即为 < jsp:useBean> 中定义的 Bean 的 id ,它的 property 属性指定的是目标属性的名字。
在面板上点击jsp:setProperty图标,如图12所示。
当点击jsp:setProperty图标以后,出现以下对话框,如图13所示:
如图13上,可以在Bean Id方框上选择已经在<jsp:useBean>中创建的Bean实例的名字,在这个例子中选择bean1,以及在Property方框中填入“Property1”。 IBM Java Server Pages插件就自动产生以下的语句:
<jsp:getProperty name="bean1" property="property1" />
这个<jsp:getProperty>元素将获得Bean(在本例子中是bean1)的属性值,并可以将其使用或显示在JSP页面中.在你使用<jsp:getProperty>之前,你必须用<jsp:useBean>创建它.
当然,<jsp:getProperty>元素有一些限制: 你不能使用<jsp:getProperty>来检索一个已经被索引了的属性;你能够和JavaBeans组件一起使用<jsp:getProperty>,但是不能与Enterprise Bean一起使用。
这个<jsp:getProperty>属性name="bean1",bean的名字,由<jsp:useBean>指定。而property="propertyName",这里使用“Property1”,它是所指定的Bean的属性名。
⑺Comment,可以是在客户端显示一个注释,或者是写在JSP程序中,但不是发给客户。
在面板上点击Comment图标,如图14所示。
当点击Comment图标以后,出现以下对话框,如图15所示:
如图15上,你可以选择是让注释在客户端显示一个注释,或者是写在JSP程序中,但不是发给客户(或者称为隐藏起来)。
如果你选择“Yes”, IBM Java Server Pages插件就自动产生以下的JSP语句:
<!-- -->
你可以在上面再增加注释,例如<!-显示在客户端的注释 -->,这种注释和HTML中很像,也就是它可以在"查看源代码"中看到。唯一有些不同的就是,你可以在这个注释中用表达式.这个表达示是不定的,由页面不同而不同,你能够使用各种表达式,只要是合法的就行。例如<!-今天是<%= (new java.util.Date()).toLocaleString() %> --> ,结果在客户端显示:<!-今天是January 1, 2000 -->。
如果你选择“No”, IBM Java Server Pages插件就自动产生以下的语句:
<%-- --%>
用隐藏注释标记的字符会在JSP编译时被忽略掉。这个注释在你希望隐藏或注释你的JSP程序时是很有用的。JSP编译器不是会对<%--and--%>之间的语句进行编译的,它不会显示在客户的浏览器中,也不会在源代码中看到。
||||||⑻Expression, 包含一个符合JSP语法的表达式。
在面板上点击Expression图标,如图16所示。
当点击Expression图标以后,出现以下对话框,如图17所示:
如图17上,你可以在Expression方框中填写如表达式,如map.size()等等,那么IBM Java Server Pages插件就自动产生以下的JSP语句:
<%= map.size() %>
当然你也可以不必自己输入表达式,还可以在图17上选择系统给出的表达式,其中可选的有:date,request.getParameter(""),request.getRequestURI(),session.getValue("")和out.print()五种。分别选择这五种时,可以产生以下的JSP语句:
<%= new java.util.Date()).toLocaleString() %>
<%= request.getParameter("") %>
<%= request.getRequestURI() %>
<%= session.getValue("") %>
<%= out.print() %>
表达式元素表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达示在JSP文件的位置显示。因为这个表达式的值已经被转化为字符串,所以你能在一行文本中插入这个表达式(形式和ASP完全一样).
当你在JSP中使用表达式时请记住以下几点:
你不能用一个分号(";")来作为表达式的结束符.但是同样的表达式用在scriptlet中就需要以分号来结尾了。
这个表达式元素能够包括任何在Java Language Specification中有效的表达式.
有时候表达式也能做为其它JSP元素的属性值.一个表达式能够变得很复杂,它可能由一个或多个表达式组成,这些表达式的顺序是从左到右。
⑼Scriptlet, 包含一个有效的程序段。
在面板上点击Scriptlet图标,如图所示
。当点击Scriptlet图标以后,出现以下对话框,如图19所示:
(图19)
如图19上,你可以选择“common scriptlets”并且在scriptlet写上多个JSP语句、方法、变量或者表达式。比如,在其上写上:
<%= session.getValue("") %><%= out.print() %>
<jsp:useBean id="bean1" scope="page" class="Bean1">
</jsp:useBean>
<jsp:setProperty name="bean1" property="property1" value="" />
<jsp:getProperty name="bean1" property="property1" />
<!--你好! -->
则IBM Java Server Pages插件就自动产生以下的JSP语句:
<%
<%= session.getValue("") %><%= out.print() %>
<jsp:useBean id="bean1" scope="page" class="Bean1">
</jsp:useBean>
<jsp:setProperty name="bean1" property="property1" value="" />
<jsp:getProperty name="bean1" property="property1" />
<!--你好! --> %>
当然你也可以不必手工填写JSP语句、方法、变量或者表达式。还可以在图19上选择系统给出的JSP语句、方法、变量或者表达式,其中可选的有:no cache,print,put session value,remove session value,setRequest, sendRedirect六种。分别选择这六种时,可以产生以下的JSP语句:
<%
response.setHeader("Cache-Control", "no-Cache");response.setHeader("Pragma", "No-cache");response.setDateHeader("Expires", 0);
%>
<%
out.println();
%>
<%
session.putValue("");
%>
<%
session.removeValue("");
%>
<%
bean1.setRequest(request);
%>
<%
response.sendRedirect("");
%>
作个总结吧,使用scriptlet,我们可以做以下的事:
声明将要用到的变量或方法(参考 声明).
编写JSP表达式(参考 表达式).
使用任何隐含的对象和任何用<jsp:useBean>声明过的对象
编写JSP语句 (如果你在使用Java语言,这些语句必须遵从Java Language Specification,).
任何文本,HTML标记,JSP元素必须在scriptlet之外
当JSP收到客户的请求时,scriptlet就会被执行,如果scriptlet有显示的内容,这些显示的内容就被存在out对象中。
||||||⑽tsx:dbconnect, 执行数据库连接。
在面板上点击tsx:dbconnect图标,如图所示
。当点击tsx:dbconnect图标以后,出现以下对话框,如图21所示:
(图21)
如图21上,你可以指定数据库的位置(URL)以及其驱动程序类(Driver Class),需要的话还可以使用于验证身份的用户ID(UserId)及密码(Password).对话框中供选择的驱动程序类有:DB2 Local,DB2 Remote,AS/400 Toolbox for Java,JDBC-ODBC Bridge,Oracle,Sybase以及Lotus Domino.在本例中选Lotus Domino. IBM Java Server Pages插件就自动产生以下的JSP语句:
<tsx:dbconnect id="conn1" url="jdbc:db2:[people]" driver="lotus.jdbc.domino.DominoDriver userid="guest" passwd="guest" />
</tsx:dbconnect>
连接数据库以后,我们就可以对数据库进行一些操作,如执行SQL语句等等。
⑾tsx:dbmodify,选择数据库,并且执行SQL插入(Insert)、更新(Update)或者删除(Delete)语句。
在面板上点击tsx:dbmodify图标,如图22所示
。当点击tsx:dbmodify图标以后,出现以下对话框,如图23所示:
(图23)
如图23上,首先选择要连接的数据库的ID,在本例中选择刚才创建的数据库的ID,即conn1.再执行两条SQL语句:
DROP TABLE table2(从数据库中彻底删除表table2)
ALTER TABLE table1 ADD EmailAdress INT NULL (在数据库的table1中增加新字段EmailAdress)
这样IBM Java Server Pages插件就自动产生以下的JSP语句:
<tsx:dbmodify id="modify1" connection="conn1" >
ALTER TABLE table1 ADD mynewcolumn INT NULL
DROP TABLE table2
</tsx:dbmodify>
⑿tsx:dbquery,选择数据库,并且执行SQL选择(Select)语句。
在面板上点击tsx:dbquery图标,如图所示
。当点击tsx:dbquery图标以后,出现以下对话框,如图25所示:
(图25)
如图25上,首先选择要连接的数据库的ID,在本例中选择刚才创建的数据库的ID,即conn1.再执行两条SQL语句:
SELECT phone FROM people WHERE au_name="Younger"(找出名为peoplede 表中包含所有为作者为Younger的相关数据)
对话框中还可以选择是否将结果显示在一张表中,并且可以指定行数。在本例子中选择该功能,并指定行数为100.
这样IBM Java Server Pages插件就自动产生以下的JSP语句:
<tsx:dbquery id="query1" connection="conn1" limit="100">
SELECT phone FRO