在JSP开发中模拟.NET WebForm
2008-02-23 08:00:50来源:互联网 阅读 ()
在现实开发中,常常需要在某个页面中处理很多Form控件,且要处理这个页面可能引发的多个事件,在事件触发后,又请求同一个页面,又需要在请求之间保持状态,在页面中处理所有这些,真实不胜其烦。受到WebForm启发,我在用JSP进行开发时,借鉴了了其一些思想。本质上我们就是想让页面显示代码与页面控制代码分离,要作到这一点并不困难,有很多办法。
可以为页面定义一个“页面处理器(PageHandler)”,它类似WebForm的后置代码,它的接口基本是下面这个样子:
public class PageHandler
{
protected HttpServletRequest request;
protected HttpServletResponse response;
protected JspWriter out;
protected PageContext pageContext;
protected HttpSession session = null;
protected ServletContext application = null;
protected ServletConfig config = null;
protected String event_action = null; //页面事件
protected String event_params = null; //页面参数
//取得操作页面的基本组件
public PageHandler(PageContext page)
{
this.pageContext = page;
this.request = (HttpServletRequest) pageContext.getRequest();
this.response = (HttpServletResponse) pageContext.getResponse();
this.pageContext = page;
out = pageContext.getOut();
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
try{
request.setCharacterEncoding("gb2312");//设定页面编码
}
catch(Exception e)
{
e.printStackTrace();
}
}
//初始化页面的参数,具体的页面处理器类可以重写这
//个方法进行页面初始化
protected void onLoad() throws Exception
{
}
//根据页面指定的事件进行处理
private final void eventBind() throws Exception
{
//event_action从从页面的名为event_action的hidden字段取得,它意为事件的称,
//当此事件触发时,他会寻找在"页面处理器类中"与event_action同名的方法加
// 以调用。
if (event_action != null && !event_action.equals(Format.Empty))
{
event_params = request.getParameter("parameters"); //事件参数参数,从页面
//的名为parameters的hidden字段取得
if (paramTypes[0] == null)
{
paramTypes[0] = Class.forName("java.lang.String");
}
Object paramValues[] = new Object[1];
paramValues[0] = event_params;
Method method = null;
try
{
method = this.getClass().getDeclaredMethod(event_action, paramTypes);
method.setAccessible(true);
}
catch (Exception e)
{
throw new UserException("系统缺少对您的请求的处理机制: event_action);
}
if (method != null)
{
method.invoke(this, paramValues); //调用web时间
}
}
}
//处理页面
public void process() throws Exception
{
try
{
event_action = request.getParameter("action"); //得页面事件
onLoad();//页面加载时的初始化
eventBind();//处理事件
}
catch (Exception e)
{
e.printStackTrace(); ///////////////
Format.alert(out, "发生了未知错误:" Format.getString(e.getMessage()));
}
}
}
当然,实用的 PageHandler应提供更为复杂的功能。
具体的页面处理器类从此类继承下来,现在,我们用一个简单的例子说明页面处理器的用法:假设有这样一个页面,有一个文本框要求用户输入一个数字,有两个按钮,点击一个要求计算出用户输入数字的2倍,点击另外一个按钮要求计算出用户输入数字的10倍。再假设此页面的页面处理器类为JspTest.
//test.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page import="youpackage.JspTest" %>
<%
JspTest handler=new JspTest(pageContext);
handler.process();//调用页面处理器
String formAction=request.getRequestURI() "?" request.getQueryString();
%>
<html>
<head>
<title>测试页面处理器</title>
<script language="javascript">
function on_event(action,params)
{
window.form1.action.value=action;
window.form1.parameters.value=params;
window.form1.submit();
}
</script>
</head>
<body bgcolor="#ffffff">
<form name="form1" method="post" action="<%=formAction%>">
请输入数字:<input type="text" name="t_value" value="<%=handler.t_value%>">
<br><br>
<font color="red"><%=handler.result%></font>
<br><br>
<input type="button" name="b1" value="2倍" onclick="on_event('onTwo','')">
<input type="button" name="b2" value="10倍" onclick="on_event('onTen','')">
<input type="hidden" name="action" value=""/>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash