看过前言就明白,实现该分离的,主要取决于三个要素
要素1: <jxui:page/>标签
此标签中,主要是一个codeBehind属性,来指定后台的绑定代码
要素2: <jxui:textbox/>标签
此标签,为了后台代码中的引用,设置了ID属性,类似ASPX的ID
对于<jxui:form/>标签,只是为了给客户端输出一段脚本和两个HIDDEN域而设计,完全可以手工,引入此FORM标签,只为和ASPX的页面类似的效果
该<jxui:form/>标签会在客户端输出如下代码
<!--
function __doPostBack(eventTarget, eventArgument)
...{
var theform = document.forms[0];
theform.__JXDO__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__JXDO__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</ script >
< form name ="frmid" action ="/JXTest/index.jsp" method ="post" >
< input type ="hidden" name ="__JXDO__EVENTTARGET" value ="" />
< input type ="hidden" name ="__JXDO__EVENTARGUMENT" value ="" />
</ form >
要素3: 后台代码的基类:JXDO.WebUI.BasePage
一个普通的JAVA类,只是里面多了点WEB环境参数罢了
运行的原理机制
当一个请求来到,JSP页面被解析,遇到标签<jxui:page/>,开始执行 doStartTag 中的代码
而后台JAVA程序,就是在 doStartTag 中被调用执行.
先得到后台的绑定代码名称,codeBehind="index.java",然后去掉[.java]字符串,接着通过反射建立index对象实例,
在index对象中提供一个方法[writeContextToBasePage]设置WEB的环境参数,有了index对象实例后,你就可以调用想调用的方法,比如后台中设定的Page_Load方法
但实际工作时,是在[writeContextToBasePage]中,进行调用.
为了保证能够正确得到数据,又加入了一个Filter对象
要素4: BasePageFilter过滤器
它主要完成,客户段提交数据后的分析,将这些数据放入[request.setAttribute]中,以便后台代码使用
这样就完成了整个框架的设计
尽请查看下一篇[实现框架代码]篇.