JSP由浅入深(10)Beans and Forms处理

发表于:2007-07-04来源:作者:点击数: 标签:
HTML BODY FORM METHOD=POST ACTION=SaveName.jsp What''s your name? INPUT TYPE=TEXT NAME=username SIZE=20BR What''s your e-mail address? INPUT TYPE=TEXT NAME=email SIZE=20BR What''s your age? INPUT TYPE=TEXT NAME=age SIZE=4 PINPUT TYPE=SUB M


<HTML>


<BODY>



<FORM METHOD=POST ACTION="SaveName.jsp">



What''s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR>



What''s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR>



What''s your age? <INPUT TYPE=TEXT NAME=age SIZE=4>



<P><INPUT TYPE=SUBMIT>



</FORM>



</BODY>



</HTML>

为了收集数据,我们要定义一个Java类,使它有“username”、“email”、“age”的区域,并且我们要提供“setter”方法“setUsername”、“setEmail”和“setAge”。这个“setter”方法只是一个以“set”开始其后是区域名的一种方法。区域名字的第一个字母要用大写的。所以如果区域为“email”,它的“setter”方法就为“setEmail”。同样的,“Getter”方法也类似定义,它只不过是用“get”来代替“set”而已。并且要使得setters和getters必须为公共的(public)。例如:

public class UserData {

String username;

String email;

int age;

public void setUsername( String value )

{

username = value;

}

public void setEmail( String value )

{

email = value;

}

public void setAge( int value )

{

age = value;

}

public String getUsername() { return username; }

public String getEmail() { return email; }

public int getAge() { return age; }

}


一旦你定义了这个类,再编译它,并且将它放置于网络服务器的类路径中。这个服务器同样要定义一个特殊的目录来放置bean类。如果你是使用Blazix你可以将它们放置到“classes”目录中。如果你必须改变类路径并且服务器正在运行,那么网络服务器就必须停止并重新启动。

下面我们来修改一下“SaveName.jsp”以使用bean来收集数据:

<jsp:useBean id="user" class="UserData" scope="session"/>


<jsp:setProperty name="user" property="*"/>



<HTML>



<BODY>



<A HREF="NextPage.jsp">Continue</A>



</BODY>



</HTML>



这里所有我们需要作的事情是增加一个jsp:useBean标志以及jsp:setProperty标志。这个useBean标志是在session中查找“UserData”的实例。如果实例被找到了,它就将更新旧的实例;如果实例没有被找到,它就将创建一个UserData新的实例(UserData的实例被称为bean),然后将它放置于session中。而setProperty标志会自动收集输入的数据,并匹配bean方法的名字,在将数据放置于bean中。

下面修改NextPage.jsp以从bean取出数据:

<jsp:useBean id="user" class="UserData" scope="session"/>

<HTML>



<BODY>



You entered<BR>



Name: <%= user.getUsername() %><BR>



Email: <%= user.getEmail() %><BR>



Age: <%= user.getAge() %><BR>



</BODY>



</HTML>



这里要注意useBean标签被重复使用了。这个bean是作为类“UserData”的变量的。由用户键入的数据都被收集在bean中。我们可以不需要“SaveName.jsp”,“GetName.html”的目标就是“NextPage.jsp”,并且只要我们增加一个jsp:setProperty 标志数据同样有效。在下一个教程中,我们要使用SaveName.jsp作为一个错误处理并自动连接到NextPage.jsp上,换句话说,它叫用户校正错误的数据。

本节教程的辅助练习为:A)编写一个JSP/HTML使得用户可以键入系统属性的名字并将显示有System.getProperty返回数值。B)回到我们刚才手动修改的boolean变量,这时我们不用boolean变量,而是将来自HIDDEN表单区域的变量设置为true或者false。

原文转自:http://www.ltesting.net