页面类和页面事件

Tapestry框架是基于事件触发机制。当满足某些事件的触发条件时,Tapestry就会触发事件所对应的页面类中的方法。

页面类
Tapestry框架的思想是面向组件编程,因此页面也是一种特殊的组件。作为组件,它拥有一个规范文件,一个HTML模板,一个页面类和若干嵌入的组件。页面没有调用参数,因为页面是整个组件层次的最外层。页面与组件的差别在于他们的规范文件不同。
为了能够让Tapestry框架实例化页面实例,需要指定一个Java类作为页面类。通常可以在页面规范中指定页面类的路径,通过页面规范<page-specification>标签的class属性,例如:

代码
  1. <page-specification class=”com.tapestry4.page.Home”>  
  2. </page-specification>  
也可以通过应用程序规范文件统一为应用程序的所有页面类指定默认定位包路径。
代码
  1. <meta key=”org.apache.tapestry.page-class-packages” value=”com.tapestry4.page”/>  
所有的组件都拥有一个隐藏得名称为page的组件属性,用以指名该组件最终被嵌入的页面,多有页面都有一个隐藏得名称为engine的页面属性,用以指明 该页面正在调用的引擎对象。当页面第一次被激活的时候,Tapestry创建页面的单一页面类实例,并放入Tapestry缓存池中,以便同一个Web应 用程序的不同session会话能够使用这个页面的页面类。缓存池中存放着满足服务器并发所需要的最少数量的页面实例。
通常情况下,页面类都继承于org.apache.tapestry.html.BasePage类,而BasePage类继承于 org.apache.tapestry.AbstractPage类。BasePage类为我们提供了一个public ContentType getResponseContentType()方法,该方法返回用于响应的上下文类型。其实,我们完全可以直接让页面类继承于 AbstractPage类。
假如我们的页面没有特殊的逻辑,就可以不为页面定义对应的页面类。这个时候,Tapestry会将BasePage类作为默认的页面类。因此,页面必须要有对应的页面类,只是有时候不用我们自己去创建而已。
如果我们认为BasePage类作为默认的页面类并不能满足我们的特殊需求,那么我们可以在应用程序规范文件中指定默认的页面类。例如:
代码
  1. <meta key=”org.apache.tapestry.default-page” value=”com.tapestry4.engine.MyBasePage”/>  

页面事件
Tapestry框架是基于事件触发机制的,例如,我们通过submit触发Form组件的监听方法等。Tapestry的页面事件是指Tapestry 的页面从Tapestry创建(或丛缓存池中获取页面类对象)类对象起,到销毁(或将页面对象放入缓存池)为止的整个过程所触发的方法。
Tapestry有5种页面事件,想要控制这些事件,就必须实现其对应的监听接口,Tapestry的所有页面事件的监听接口都位于org.apache.tapestry.event包下。

PageAttachlistener 当页面被当前请求第一次获取时,在页面持久化属性被回退为初始值之后触发 基于当前session状态创建页面属性,从应用程序整体状态对象中获取数据。

PageValidateListener 当页面被激活的时候触发,可以通过抛出PageRedirectException异常跳转到其他页面 通常用于检查用户是否有权访问该页面,有助于制定应用程序的安全规则。

PageBeginRenderListener 当页面开始表现的时候触发,这是最后一次更新持久化页面属性的机会 通常用于实现页面开始表现是需要实现的业务逻辑
PageEndRenderListener 当页面开始表现完毕之后,即便在页面表现是抛出异常,也仍然会触发 通常用于实现页面表现完毕时需要实现的业务逻辑

PageDetachListener 当页面与请求分离,页面类实例被Tapestry放回页面缓存池的时候触发 清除页面临时状态,清除所有客户端状态,将页面恢复到初始化状态

8年ES运维经验整理出的Elasticsearch运维手册(超实用) k1 : 控制非线性词频率归一化(饱和),Elasticsearch中默认值为1.2。用人能看懂的话说就是词语在文档中出现的次数对于得分的重要性。例如说我觉得在某些场景,一个搜索词在文档中出现越多则越接近我希望搜索的内容,就可以将这个参数调大一点。b :控制文档长度对于分数的惩罚力度。变量b处于分母上,它乘以刚刚讨论过的字段长度的比值,Elasticsearch中的b 默认值为0.75。如果b较大,则文档长度相对于平均长度的影响更大。 阅读详情

相关推荐

2024高项范文-论项目成本管理

例如,在需求分析和设计阶段,安排了较多经验丰富的人员,确保基础工作的高质量完成,同时也避免了后续因需求变更等问题导致的时间和成本浪费。虽然项目进度略有延迟,但通过有效的成本管理和调整,最终在可控的成本范围内完成了项目,并且软件的质量也得到了保障。通过这个案例可以看出,在项目成本管理过程中,要紧密结合时间管理,根据实际情况灵活调整策略,注重风险的防范和应对,才能实现时间和成本的平衡,确保项目的成功。资源规划是成本基准形成的基础。识别和评估项目中的成本风险,并制定相应的应对措施,以降低风险对项目成本的影响。

xjflion的博客 1188

Tapestry学习笔记(6)

Tapestry学习笔记(6) 2007-05-31 15:47 页面类和页面事件 Tapestry框架是基于事件触发机制。当满足某些事件的触发条件时,Tapestry就会触发事件所对应的页面类中的方法。 页面类 Tap...

fangyong2006的专栏 208

tkinter使用label视频播放

tkinter是python的界面开发包 使用tkinter显示视频流的一个办法是使用label来逐帧显示图片。 from Tkinter import * from PIL import ImageTk, Image import cv2 root = Tk() # Create a frame app = Frame(root, bg="white") app.grid() # Create a label in the frame lmian = Label(app) lmain.grid(

六十英里的专栏 5526

Tapestry内部工作原理的笔记

tapestry的URL形如/examples/app?service=page/Admin能够保证有效运行的一个非常重要的原因是,用有状态的javabean代替无状态的servlet构建一个tapestry应用。page是有状态的,他只能在一个线程里为一个用户处理一个request,而一个servelet,没有用户的状态,可以在并发线程中为任何数量同时发生的request提供服务。使用有状态

xymyeah 2832

手把手教你用Simulink搭建级联H桥储能变流器仿真模型(附SOC均衡分析)

本文详细介绍了如何使用Simulink搭建级联H桥储能变流器仿真模型,并附有SOC均衡分析。从仿真环境准备、单相H桥单元建模到多模块级联方案和SOC均衡策略实现,逐步指导读者完成复杂系统的构建与优化。通过关键仿真结果分析和工程实践问题排查,帮助读者掌握级联H桥储能变流器的核心技术与应用方法。

weixin_42524226的博客 445

Visual Studio报错TRK0005找不到CL.exe?三步彻底解决环境变量问题

本文详细解析了Visual Studio报错TRK0005找不到CL.exe的根本原因,并提供了三步彻底解决环境变量问题的方案。从验证安装完整性到配置永久环境变量,再到注册表级修复,帮助开发者建立健壮的开发环境配置体系,确保编译链稳定运行。

weixin_30839881的博客 459

85 事件分类——页面事件

文章目录1、页面事件加载事件onload 思考:HTML页面是按照什么样的顺序进行加载的? 答案:页面的加载是按照代码的编写顺序,从上到下依次执行的。 会出现的问题:若在页面还未加载完成的情况下,就使用JavaScript操作DOM元素,会出现语法错误。 解决办法:页面事件可以改变JavaScript代码的执行时机。 1、页面事件 load事件:用于body内所有标签都加载完成后才触发,又因其无需考虑页面加载顺序的问题,常常在开发具体功能时添加。 unload事件:用于页面关闭时触发,经常用于清除引用避

Blog of Lytracy 1250

从SolidWorks到Simulink:手把手教你用URDF文件搭建六轴机械臂仿真模型(含STL文件配置避坑)

本文详细介绍了从SolidWorks到Simulink的六轴机械臂URDF仿真全流程,包括URDF文件导出、Simscape模型生成与调试、动力学参数获取与验证等关键步骤。重点解决了STL文件配置、关节接口设置等工程化难题,帮助开发者高效构建可控制的数字孪生体。通过实战案例和优化技巧,提升机械臂仿真效率与准确性。

weixin_26812607的博客 265

Tapestry4学习指引(二)

十二. 自定义tapestry组件时,如果定义的组件包含有.html模板的话(即:allow-body="no",不使用组件的body,直接用.html的body),则该自定义组件对应的java类必须extends BaseComponent类,否则如果定义的组件的输出是通过对应的java类来输出html标签(没有.html模板,allow-body="yes"),则必须继承AbstractCom...

嘉鸿日月星空 323

Android MediaCodec学习笔记

模块介绍 基本概念 OpenMAX是Khronos Group提出的标准,目标在于创造一个统一的接口,加速大量多媒体资料的处理。OpenMAX分成三层:应用层(Application Layer, AL), 整合层(Integration Layer, IL) 以及开发层(Development Layer, DL)。 OpenMAX (Open Media Acceleration) OpenMAX AL Application Layer ..

kisshine 2358

深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践

在异构计算领域,Zynq-7000系列SoC的AMP(Asymmetric Multiprocessing)模式堪称多核编程的瑞士军刀。独立运行环境:CPU0运行Linux,CPU1运行FreeRTOS或裸机程序硬件资源独占:CPU0管理DDR,CPU1使用OCM(片上内存)中断隔离:默认所有中断路由到CPU0这种架构非常适合需要实时响应的工业控制系统——比如用CPU0处理网络通信,CPU1负责电机控制。AMP模式下中断路由的底层原理多维度性能优化技巧工业级可靠性的实现方案。

QQ_778132974的博客 491

解决tapestry中页面跳转(throw new PageRedirectException)乱码问题

前几天在论坛发布了 关于 在tapestry 这中执行页面跳转 后乱码的问题,发现好几天都没有回复,诶现在的人好冷淡,俗话说的好啊求人不如求自己 开始查看 tapestry源代码 然后修改原来的页面跳转源代码,其实就是原来的 那句 throw new PageRedirectException(getErrorPage()); 替换成下面这些采用自己的方式进行跳转其实就是为了修改编...

姜振 343

基于STM32与FPGA的数据采集系统的设计与实现

数据采集系统在现代工程中起着至关重要的作用,用于实时获取和处理各种传感器或外部设备的数据。在本文中,我们将探讨如何基于STM32微控制器和FPGA(现场可编程门阵列)实现一个高效的数据采集系统。我们可以使用STM32的UART、SPI或I2C接口与各种传感器或外部设备进行通信,并通过GPIO口实现控制功能。在硬件连接完成后,我们可以通过STM32控制FPGA的配置和数据传输。STM32作为主控单元负责与外部设备进行通信和数据处理,而FPGA则用于高速数据采集和实时处理。具体的通信协议取决于连接的设备类型。

UbiSqlserver的博客 1797

三、使用基页面类、模板页及用户控件

    何为“基页面类”?就是指创建一个类继承自System.Web.UI.Page,然后让项目中的所有.aspx页的类继承它,那么它就是基页面类。     使用基页面类的好处: 可以提供所有.aspx页适用的属性、方法,方便的实现一些功能,如:页面访问计数、更改页面Culture、实现自动登入功能等     使用模板页的好处: 设计良好的模板页可以让网站轻松实现更换皮肤(Skin

学习 1325

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

事件相关内容

1、事件   (1)事件源:触发事件的源头   (2)事件类型:什么行为   (3)事件处理函数:触发行为时要做什么事,触发事件源的对应的事件类型时,直接被执行的函数   (4)事件对象:记录事件发生的所有信息 2、事件类型   (1)鼠标类     1)onclick:点击     2)ondblclick:双击     3)onmousedown:按下 ...

199

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

qt新建页面类

上述两个例子均写于鼠标绘图事件工程,账号密码保存于json内,其余内容与上一篇文章一致。新建界面信息LogWidget* m_log;//添加登录页面信息。添加#include "logwidget.h"头文件。项目-右键-添加-新建项-Qt-widgets类。主要是将主界面显示给禁止掉,在登陆后再显示主界面。添加#include "seting.h"头文件。示例2 配置界面(按键弹窗)主界面 添加配置按钮。

weixin_46575013的博客 266

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

继承System.Web.UI.Page的页面基类

服务器端的page类 所有我们编写的页面都继承自page类,可见page类是非常重要的,page类提供了哪些功能,直接决定了我们的页面类可以继承什么功能,或者说,直接决定了我们的页面类功能的强大与否!那么,page类实现了什么功能呢?如前所述的三个客户端的事实,页面类要管理ViewState,还要管理事件。page类起码要提供这些功能以供我们的页面类重载或者调用。 page类提供了四...

weixin_34387284的博客 91

Android中手势事件的分发流程

在手机上,我们都是通过对屏幕的触摸实现软件的操作,那么这些各种的触摸事件就存在一个嵌套分发的过程,这里我们说说手势分发的相关知识。 1.3类手势执行方法 dispatchTouchEvent:进行事件分发处理,返回结果表示该事件是否需要分发。默认返回true表示分发给下级视图,由下级视图处理该手势,不过最终是否分发成功还得根据onInterceptTouchEvent方法的拦截判断结果;返回false表示不分发,此时必须实现自身的onTouchEvent方法,否则该手势将不会得到处理。 onInter

水月洞天 764

关于aspx页面类继承于cs页面类

cs页面类继承自System.Web.UI.Page类,一般和文件同名,如果遇见关键字的情况才会自动使类名前加个'_',例如:_Default。关于cs页面类我们经常使用,它事实上是一个部分类,除了在cs文件里有一部分以外,在designer.cs文件还有另一部分(声明控件)。我们来谈谈其派生类---aspx页面类(从&lt;%@Page里的Inherits属性可以看出),虽然我们编程的时候主要是...

扬 帆 起 航ing 622

asp.net 页面事件执行顺序

初始化² 当页面被提交请求第一个方法永远是构造函数。您可以在构造函数里面初始一些自定义属性或对象,不过这时候因为页面还没有被完全初始化所以多少会有些限制。特别地,您需要使用HttpContext对象。当前可以使用的对象包括QueryString, Form以及Cookies集合,还有Cache对象。注意:在构造函数里是不允许使用Session的。² 下一个将执行的方法是AddParsedSub

也想快乐的生活 916

【JavaScript】十八、页面加载事件和页面滚动事件

script标签在html中的位置一般在</body>标签上方,这是因为代码从上往下执行,在html元素都没加载的情况下,JS去获取DOM对象,会获取不到,如下,script标签提前,button对象就获取不到。如下,在上面div的例子中,滚动条向下拉,文字向上走(绿色代表div盒子,红色代表文字内容),紫色线所示长度,就是被卷去的长度,即scrollTop。当然,一般获取的是页面滚动的距离,获取整个html页面,不是document.html,而是document.documentElement。

llg___的博客 1526

day23 其他事件(页面加载事件、页面滚动事件)

页面加载事件、页面滚动事件。

这这的博客 1678

【vue】监听页面刷新和关闭事件

vue监听页面刷新和关闭事件 需求背景 在离开页面的时候,需要弹出提示框,让用户确定是否真的要关闭网页。如果用户真的需要关闭网页,则让浏览器向后台提交信息。 原始实现 在beforeDestory钩子函数中,调用提交操作。 beforeDestroy () { this.updateRecord() }, 经实验验证,该方法无法达到目的。 发现beforeDestroy 只能监听到...

u010671652的专栏 1万+

JavaScript事件监听之其它事件(页面加载事件、元素滚动事件、页面尺寸事件、M端事件)

javascript在head中,直接获取btn,添加监听事件是无效的,因为btn为null。所以给window添加load事件,等window的资源加载完毕,再去执行回调函数就可以点击按钮了。改变div的内容长度或改变padding值,clientWidth都会变化,但改变border值,clientWidth不会变化。移动端有自己独特事件,比如最常见的touch(触屏事件/触摸事件),Android和IOS都有,touch对象代表一个触摸点。当页面的宽度不断变化,控制台不停的打印页面的宽度数值。

Bulut0907 2654

JS进阶DAY3|页面加载事件和页面滚动事件

DOMContentLoaded 关注的是HTML文档的加载和解析,而 load 关注的是整个页面及其所有资源的完全加载。根据你的脚本需求,选择合适的事件来确保最佳的执行时机。当初始的HTML文档被完全加载和解析完成后,不等待样式表、图片和子框架完成加载,就会触发 DOMContentLoaded 事件。这个事件适合执行那些需要页面完全加载后才能进行的操作,比如最终的页面布局调整、动画效果的触发等。这个事件可以用来检测页面的滚动位置,实现基于滚动位置的动态效果,如懒加载图片、固定头部导航栏等。

2301_80743865的博客 1123

js的页面加载事件和页面卸载事件

(1)页面加载事件onload():当页面载入完毕后执行Javascript代码。 浏览器支持: (2)页面卸载事件onunload(): onunload 事件在用户退出页面时发生。 onunload 发生于当用户离开页面时发生的事件(通过点击一个连接,提交表单,关闭浏览器窗口等等。) 浏览器支持: 【范例】在页面载入完毕时提示"请问要将此页面设置为主页吗?",退出页面时

Leo的博客 9494
上一篇: (转)ant
下一篇: 生命周期
flyingjava
博客等级 码龄20年 9粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值