首页 > 编程 > JSP > 正文

使用JavaBean高效处理JSP(3)

2024-09-05 00:19:11
字体:
来源:转载
供稿:网友


form处理、动态内容和bean通信

  列表4展示了一个具体的jsp javabean--loginjspbean,用来实现特定的页面处理

  列表4。loginjspbean


package lbm.examples;

import lbm.jsputil.*;
import java.util.*;

public class loginjspbean extends abstractjspbean {

public static final string page_code = "login";

private string _voterid;
private string _password;
private voter _voter = null;

public loginjspbean() {
}

public void setvoterid (string newvoterid) {
_voterid = newvoterid;
}

public string getvoterid() {
if (_voterid == null) return "";
else return _voterid;
}

public void setpassword (string newpassword) {
_password = newpassword;
}

public string getpassword() {
if (_password == null) return "";
else return _password;
}

public voter getvoter () {
return _voter;
}

protected void beanprocess () throws java.io.ioexception {
if (_voterid == null || _voterid.equals("")) {
adderrormsg("voter must be entered");
}

if (_password == null || _password.equals("")) {
adderrormsg("password must be entered");
}

if (getstate() != err) {
file://if all the fields are entered, try to login the voter
voter voter = votedb.login(_voterid, _password);
if (voter == null) {
adderrormsg("unable to authenticate the voter. please try again.");
}
else {
_voter = voter;

if (_voter.getvotedforcandidate() != null) {
// if the voter has already voted, send the voter to the last page
redirect("confirmation.jsp");
}
else {
// go to the vote page
redirect("vote.jsp");
}
}
}
}

protected void beanfirstpassprocess() throws java.io.ioexception {
}

protected void beanfooterprocess() throws java.io.ioexception {
}

protected string getjspcode() {
return page_code;
}
}



  观察loginjspbean类中的set和get方法。就象上面提及的,它们用作动态的匹配,并且用来在form字段(request参数)和bean属性间传送值。

  列表4中的beanprocess()方法,展示了form处理的一些基本点。这个方法发生在页面输出前,在第二和全部后来的页面调用期间执行。这意味着它将仅在用户按下登录按钮并且提交form后执行。

  你首先要验证voteid和password的输入,产生的错误将通过adderrormsg方法记录下来。这个方法设置abstractjspbean类的errormsg属性。该属性可被jsp用来显示用户的错误:

   <jsp:getproperty name="_loginjspbean" property="errormsg"/>

  如果数据的输入成功通过,beanprocess()方法将会调用数据库来验证用户。最后,它通过调用abstractjspbean类中实现的redirect()方法,将请求重定向到相应的页面。

  以下我们将讨论votejspbean类中的一些方法。它们将可以解释该架构的一些其它方面,例如jsp javabean之间的通信和应用的流程控制。

  列表5。votejspbean类中的beanfirstpassprocess()


protected void beanfirstpassprocess() throws java.io.ioexception {
// get the voter from login page
_voter = null;

loginjspbean loginjspbean =
(loginjspbean) getsharedsessionbean().getjspbean(loginjspbean.page_code);

if (loginjspbean != null) {
_voter = loginjspbean.getvoter();
}

if (_voter == null) {
// voter is not logged in yet. send it to login page
setstate(new);
redirect("login.jsp");
}
}



以上的方法使用了abstractjspbean类中_sharedsessionbean对象。sharedsessionbean类通过使用一个简单的方法,让所有的jsp javabean对象在一个http session中进行通信。它保存有一个session内的全部jsp javabean中的一个map。map是java collections框架的一个接口,它是java 1.2推出的。对熟悉java 1.1的人来说,它与hashtable非常类似。一个jsp javabean的主键是它的page_code,它作为一个常数存储在每个jsp javabean类中。

  在这个例子中,beanfirstpassprocess()方法首先定位到loginjspbean对象。接着,它由loginjspbean对象中得到voter对象,并且存储一个到它的引用,以便以后使用。如果voter为null,这意味着用户没有首先登录就进入voter页面,因此它重定向到登录页面。这是一个应用流程控制的简单例子。你可以设计更复杂的方法,例如使用一个智能的调度程序,不过这些讨论已经超出了本文的范围。

  列表6。votejspbean类的getcandidatelist()方法


public string getcandidatelist () {
stringbuffer candidatelist = new stringbuffer();
candidate candidate;

iterator candidates = votedb.getcandidates();
while (candidates.hasnext()) {
candidate = (candidate) candidates.next();

candidatelist.append("<input type=radio name=/"candidatename/" value=/"");
candidatelist.append(candidate.getname());
candidatelist.append("/"> ");
candidatelist.append(candidate.getname());
candidatelist.append("<br>/n");
}

return candidatelist.tostring();
}



  以上的getcandidatelist()方法被vote.jsp调用,通过以下的方法:

   <jsp:getproperty name="_votejspbean" property="candidatelist"/>

  根据由数据库得到的内容不同,该方法提供不同的动态html内容输出。它需要开发javabean的java编程者懂得一些html知识。

  你也可以使用一个利用html的独立库来格式化html,它可以接受一个预定义的输入。例如iterator,然后以预定义的格式产生html输出。另一个方法是使用标签库。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表