tapestry调试技巧

PaddleOCR多进程GPU推理实战:200万图片高效处理方案 本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。 阅读详情

调试Tapestry有什么技巧?本来调试jsp不需要重启server。而tapestry
无论是修改了template还是page都需要重启server,anybody知道什么
吗?

在设置context的时候,将reloadable设置为true
当你改完page和html的时候,将某个class文件重新编译一下,这样再次访问的时候,tapestry就会reaload resouce

给Tomcat Eclipse Plugin设置一个jvm参数即可:
-Dorg.apache.tapestry.disable-caching=true

1。关于Component没有getVisit,而Page有的Inconsistency:
Page里头取Visit/Global是getVisit()/getGlobal()
可是Component里头没有这个函数,要
getPage().getVisit()/getPage.getGlobal()
为什么会有这种Inconsistency,常常还得我
从Page抽Component的时候要改这些代码,
自己写了个Component extends BaseComponent

getVisit调getPage.getVisit()
getGlobal调getPage.getGlobal()
这样方便多了
2.关于属性要不要写abstract的get/set
我还是倾向于写一个instance field,然后用alt+insert直接
生成get/set方法,要比自己手动写abstract的get/set方便快捷得多。
3.关于调试页面
有的时候html模版显示的一些东西不正常,比如@Conditional下的
东东就是出不来,想要调一下Condtion.
我是习惯用@Insert控件,然后在前面把东西打出来,
在disable cache的情况下只需要刷新一下就好了,改好以后
再删除,很是方便。
另外调试状态下,我习惯在Border里头底部写上@Insert value="ognl:page",打出当前页面到底对应那个类,
方便调试。因为Tapestry的cycle forward方式url常常不变的,
搞得我不知道当前页面到底对应那个类。然后在Border上面
写一个小form,直接提交要访问的页面,也是方便调试的。
以上都是一些用tapestry中的小tip,大家还有什么tip的,
可以提出来一起讨论讨论。




Tapestry 4.0 学习笔记v1

Tapestry

页面对象

在page文件中声明属性,可以不必在java文件中声明以及其get、set方法
t4默认getXXX()抽象方法中的XXX为页面属性,.page不用声明,并使用@InitialValue("value")赋初值.
页面对象实例会被缓存(有潜在非法访问问题),解决方法:
覆盖initialize()方法,初始化实例变量。(在放入缓存池时天会调用initialize())
在.page中声明实例变量,.java声明get/set方法(可有可无),t4自动生成代码初始化
实现PageBeginRenderListener接口,在页面render之前初始化参数,可防止空指针异常
开发调试

禁止缓存参数
-Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true

调试参数

set JAVA_OPTS="-Dorg.apache.tapestry.disable-caching=true" set JPDA_ADDRESS=8000 set JPDA_TRANSPORT=dt_socket catalina jpda start
activate()不会立即转页,它仅保存页面对象引用在IRequestCycle中。listener执行结束后才会转业。

获得转页页面对象

.page不用任何声明,.java提供抽象方法和元数据
.page中inject页面属性,.java中提供抽象方法
使用元数据inject页面和属性,可以不用在.page中进行声明
获得页面使用@injectPage("pageName")
t4中若发现该类包含一个未实现的“getXXX”方法,会默认产生一个实例变量XXX。该实例变量没有初始化方法,可以在getXXX()声明@InitialValue("literal:initValue")解决

表单验证

delegate
方案1:打印出错信息需要new一个ValidationDelegate。
方案2:.page文件中配置<bean>标签
方案3:.page中不配置<bean>,抽象方法上使用元数据@Bean
validators
.page文件中每个需要验证的表单元素组件绑定一个validators
表达式:validators:+判断条件+[错误提示]
空输入问题
t4默认空都可以验证通过
通过[value="validators:required"]来保证输入不为空
Fieldlable可以与TextField绑定显示错误信息
客户端验证
在Form组件中绑定<binding name="clientValidationEnabled" value="true"/>
若表单输入验证正确,逻辑上的验证应该在监听方法中进行
例如:苹果库存只有20,用户买进50,这是非法的
验证时应向ValidationDelegate记录出错信息
创建delegate
delegate.setFormComponent((IFormComponent) getComponent("XXX"));
delegate.recordFieldInputValue(Integer.toString(XXXX));
delegate.record("XXX must be >=0",ValidationConstraint.TOO_SMALL);
每个页面对象都报含一个Map,保存bean。(没有则自动创建,返回页面池时bean自动销毁1)若要在.page中获得一个已定义的Bean,使用beans前缀调用。例如:beans.beanId.beanProperty。
For、Foreach使用时,要在.page中对<source>集合对象内的元素声明<property>。以方便t4,生成get、set方法。

组件复用

t4中一个组件不能用两次,即一个jwcid不能在.html中重复出现
解决方案:组件重命名。<compoment id="rename" copy-of="name">
“Class@XXX”表示访问一个class的XXX静态方法或静态变量
判断按钮是否clicked三种方式
对每个button使用一个Form组件
给每个button添加一个“tag”,通过tag值判断which按钮be clicked
为每个button添加一个listener(简单、面向对象,推荐使用)

submit提交原理

监听方法获得参数的方式
1、实现IRequestCycle会的监听方法的参数
2、声明带正确参数顺序的监听方法,t4自动boxing
* public type method(parameters)
* public type method(IRequestCycle cycle, parameters)
* public type method()
* public type method(IRequestCycle cycle)
页面提交后,t4会从页面pool重新获得或创建page object。因此提交前后同一页面的页面对象引用是不一样的,实例变量可能会一样也不可能一样。
因此不要在页面对象在定义成员变量(包括页面组件对应的成员变量),因为跨页面访问他们总是无效的有潜在危险。
上面问题的解决方案
1、使用客户端持久化需要访问的持久化成员变量,声明get、set抽象方法,用@Persist("client")注释。 使用时应判断get方法是否为null,因为这种持久化方式不会初始化变量
2、使用抽象get、set方法,由t4来实现。
HiveMind模块
session对象可以在hivemodule.xml中配置
hivemodule.xml存放于WEB-INF/classes/META-INF 目录下。或.jar文件的META-INF目录下
hivemodule.xml每个模块的id必须唯一,一般以模块包名作为id
session
获得方式
1、声明抽象方法,通过元数据injectState("ObjectName")注释
2、声明抽象方法,在.page中<inject>对象
判断存在方式
annotation
1、声明抽象方法,该方法命名格式为getXXX()或者isXXX()
2、使用元数据注释@InjectStateFlag("sessionObj")
.page声明<inject type="state-flag" property="userExists" object="sessionObj"/>
注销:使用Servicelink组件的restart service。该service删除sessionObj,并且从定向到首页。
t4通过无参的构造器来创建对象
安全处理
1、关键性页面应该在页面中进行用户验证,防止匿名用户访问。页面对象实现PageValidateListener接口。
2、htmlA-〉login-〉htmlA方式解决方案
该页面类实现IExternalPage,该接口可接受参数
参数维护
客户端保存参数(推荐)
1、使用Hidden组件,并提供该属的get、set方法实现
2、使用元数据@Persist("client"),不能够声明abstract的set、get方法
session保存参数
snippets
默认表达式
.html中为literal
.page中为OGNL
property access
mathematical expressions
method invocations
reference static fields of public classes
create new objects, including lists and maps
URL中的sp,t3叫服务参数、t4叫监听参数
page对象查询
1、.page中声明
2、在.application声明org.apache.tapestry.page-class-packages中查找(推荐)
特殊页面组件
1、$remove$,删除该html元素(即仅去掉某元素)
2、$content$,只生成该元素标签间的的html code, 该元素以外其它元素忽略去掉(即仅保留某元素标签内的内容)
国际化
html中使用技巧
1、<span key="hello">Hello</span>指名说用字典key
2、必须为<span>标签,且key自不必加前缀(如message:,OGNL:)
不同地区的页面风格,以XXX_CN.html这种方式命名
字典文件
1、每个page可以拥有一个poperties
2、在WEB-INF下建立${servletname}.properties,所有page共享
自定义组件
组件配置文件推荐最合理是放在WEB-INF下
contrib中的控件的使用
<library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
input校验
推荐使用writer.beginEmpty("input")
使用writer.begin("input")和writer.end()
rewinding(重绕),可以理解为刷新
form.isRewinding()
cycle.isRewinding()
参数
组件参数初始化
.jwc中<parameter>设置初始化
finishLoad()方法中初始化
参数类型
formal:是被定义在组件规范中的组件参数。每个formal parameter有一个特定(区分大小写)的名称,并且被标为required或者optional。
informa:是Html元素的属性参数。
页面配置
绑定方式
1、静态绑定:即只读,绑定的值在组件规范中指定
2、动态绑定:组件需要的时候,动态绑定通过其指定的JavaBean获得值

 

关闭Tapestry缓存池,提高开发效率

Tapestry对页面有自己的缓存策略。一旦页面被第一次访问,页面对象就会被加载到缓存中。因此,每次对HTML、page或java的修改,并不会马上生效,必须重新启动服务器。在我们开发程序的时候,这样相当不方便。因此我们可以关闭Tapestry的缓存策略,等到项目发布的时候,再开启。

在MyTapestry.application中添加:

<meta key="org.apache.tapestry.disable-caching" value="true"/><meta key="org.apache.tapestry.enable-reset-service" value="true"/>

并在JVM中添加:

-Dorg.apache.tapestry.disable-caching=true-Dorg.apache.tapestry.enable-reset-service=true
态路小课堂丨三款800G光模块方案介绍—SR8/DR8/2FR4 800G QSFP-DD 2FR4光模块使用CWDM4波长(1271/1291/1311/1331nm),单通道速率为100G,通过MUX减小光纤的数目,其光学接口采用CS接口或双芯LC接口。 阅读详情

相关推荐

16、Tapestry框架中的日程安排应用开发详解

本文详细介绍了如何使用Tapestry框架开发一个日程安排应用的Add页面,涵盖了页面规格说明、模板、后台类的实现以及输入验证和错误处理机制。同时,对Tapestry框架进行了评估,分析了其文档、示例、调试支持及优缺点,帮助开发者理解其在Web开发中的应用与价值。

tech5的博客 107

Tapestry中的组件及功能

A)Foreach组件:首先,我们接触到的第一Tapestry组件是Foreach组件。Foreach是一个循环组件,它遍历source参数,并在表现其内容前更新value参数。这是Tapestry组件参数的至关重要特性:将一个属性与一个组件参数绑定,组件不仅读取被绑定的属性,而且更新属性。Foreach组件使用标签,当其表现(render)时,并不直接生成任何HTML

CaidChen的专栏 2833

(数据来自权威)地级市工具变量大全

## 数据指标说明数据范围:290+地级市数据指标(九大工具变量):明朝驿站儒家文化河流密度高程和坡度方言数据杭州到各城市的球面距离1984年邮局数和固定电话数地级市到“八纵八横”光缆传输骨干网建设节点城市的最近距离地形起伏度

Tapestry学习笔记——JVM设置

对于运用Tomcat+Tapestry进行开发的时候由于Tapestry对生成的文件有缓存处理机制所以更改文件的时候Tapestry都不会自动更新使得每次更改内容都必须重启Tomcat为了解决这个问题可以在JVM中添加一下内容:-Dorg.apache.tapestry.disable-caching=true-Dorg.apache.tapestry.enable

启航 502

Tapestry总架构

Tapestry总架构 原文:http://bilang.rocklv.net/Tapestry.htmlTapestry 开发调试 禁止缓存参数 -Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true 调试参数 set JAVA_OPTS="-Dorg.apache.

truddysnow的专栏 1553

在 Tomcat 中设置 Tapestry 框架的 html 热加载

为什么80%的码农都做不了架构师?>>> ...

weixin_34129145的博客 379

tapestry调试技巧(转)

调试Tapestry有什么技巧?本来调试jsp不需要重启server。而tapestry 无论是修改了template还是page都需要重启server,anybody知道什么 吗? 在设置context的时候,将reloadable设置为true 当你改完page和html的时候,将某个class文件重新编译一下,这样再次访问的时候,tapestry就会reaload resouce...

蜗牛/ 的博客 287

Tapestry 整合 Acegi

If youve read a couple of my last (unanswered) posts, youll see that I was flailing on getting Acegi and Tapestry to play nicely together-- mostly due to the fact that (a) Im a noob and (b) Tapes

deadswan000的专栏 888

Tapestry简介

Tapestry简介 efly 原创  (参与分:730,专家分:980)   发表:2003-7-2 下午2:10   更新:2003-7-8 上午11:16   版本:1.0   阅读:5452次 你熟悉组件编程吗? 你想要高性能的网站吗? 你想要网页脱离杂乱的脚本语言吗?是,我要关注并学习TapestryTapestry是一个新的针对Web的应用框架(Appli

三V工作室·泰伯子仪 1825

关于Tapestry的一些问题

来源:http://forum.javaeye.com/viewtopic.php?t=6035&sid=42b6f6b88ee6a3cc2e2ccdea70a7fdf9   Tapestry也用了一段时间了,对于Tapestry基本上也是了解的很透了,不过也慢慢发现了一些问题,虽然Tapestry号称可重用的Server端控件,号称基于html模版,可是实际上还是有些问题。 首先,基于html

三V工作室·泰伯子仪 1318

Tapestry入门及进阶一

Tapestry开发一个Web Application,对一个新手来说有点困难的,Tapestry由于不同于以前的Web Presentation Framework,所以不可讳言,学习曲线比较长这是事实。我先讲讲一个Web Application的大体结构:以JBuider9为开发工具,你要先建立一个工程,例如是名称是TapestryExmaple,它的workspace是F:/myproje

TangAiYun专栏 2252

Tapestry学习中一点总结

对之前的该文章进行了一些修正,主要是针对finishLoad()方法。 我觉得对初学者会有一些帮助。 下面这几个函数是我在使用的,它们的执行顺序依次从上到下。 1.protected void finishLoad() {} *** 2.public void pageValidate(PageEvent event) {} 3.public void activateExternalPage(O

LifeNote 573

tapestry注释介绍Annotations

tapestry在很大程度上依赖于Java注释,而不是XML文件,几乎它的所有配置。(另外,Tapestry的方法命名约定的意思是你在许多情况下不必使用注释)。 Tapestry的注解根据他们的目的被分为几个不同的模块。 Tapestry Core and IoC 注释 大多数的tapestry注释(Tapestry Core andIoC的定义)是非常具体的Tapestry组件或Tapes

u012749355的专栏 1121

Tapestry4.0笔记

Tapestry 页面对象 在page文件中声明属性,可以不必在java文件中声明以及其get、set方法 t4默认getXXX()抽象方法中的XXX为页面属性,.page不用声明,并使用@InitialValue("value")赋初值. 页面对象实例会被缓存(有潜在非法访问问题),解决方法: 覆盖initialize()方法,初始化实例变量。(在放入缓存池时天会调用initial

lili_zhao的专栏 609

Tapestry(一):结合jetty开发Tapestry3项目

背景 公司在回收外包项目,该项目使用tapestry3、maven1技术,都是很老的了,尤其是maven1,连官网都找不到资料,但是也不好重新开发。于是就学习一下tapestry。 环境 eclipse3.1、jdk1.5(32位)、jetty4.2.21、tapestry3 插件配置

EGWriket的博客 679

Tapestry 和 Wicket 的比较

   JSF 和 Struts 是开发人员在进行 Web 开发时使用的传统的组件框架。但还有另外一种选择,Tapestry 和 Wicket,它们是面向组件的 Web 框架,其设计目标专门针对 Web 应用程序创建。本文采用 Tapestry 和 Wicket 技术开发了一个简单的应用程序示例,该程序实现了一个 to-do 列表的工作流。 Tapestry 和 Wicket 被宣扬为流行的

halemyan的专栏 926

Tapestry 项目使用教程

Tapestry 项目使用教程 1. 项目目录结构及介绍 Tapestry 是一个由 TheIconfactory 开发的一个开源项目原型。项目的目录结构如下: Tapestry/ ├── Apps/ │ └── TapestryDataTool/ ├── Documentation/ ├── Plugins-Debug/ ├── Plugins-Disabled/ ├── Plugins/ ...

gitblog_00229的博客 436

Tapestry开发环境搭建

1、JDK1.5 2、Tapestry4.0 3、Eclipse 3.2 4、Tomcat 5.5.16   开发过程中,禁用Tapestry页面缓存,以便于页面Html修改后能立即生效。操作如下:使用Config Tomcat,在Java选项卡中的Java Options中加入: -Dorg.apache.tapestry.disable-caching=true   开发过成中,为了使对Jav...

bluebijou的专栏 307
上一篇: 使用商业智能分析系统进行同比、定比、环比分析
下一篇: 网站建设方案(帖)
chinafc
博客等级 码龄23年 6粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值