在netbeans中建立完整的Tapestry5开发环境

05月 16th, 2008 No Comments   Posted in 开发工具

如果您喜欢本博客,欢迎订阅RSS feed.

      今天看到篇文章介绍了如何在netbeans中使用maven调用tapestry5-quickstart模块来开发tapestry5,这里再总结下,并介绍些技巧。

      首先当然是要安装好netbeans了,我一般下载zip版的javase packs,版本为6.1,插件都是自己按照需要来安装,我们要用到maven,就要先下载maven的netbeans插件,如图搜索maven,选择maven插件,单击install,接受协议,就可以下载安装了。

安装maven插件

maven

我们要开发的是web程序,需要netbeans支持web程序的开发,这就需要安装web applications插件了,如图搜索web applications,选择web applications插件,单击install,接受协议,就可以下载安装了。

   安装web applications插件

webapplications

两个插件安装好了后,就可以新建tapestry5-quickstart项目了,单击菜单File->New Project,如图选择Maven->Maven Project。(中文系统默认maven插件为中文环境,开发时不喜欢中文环境,在netbeans.conf配置文件中添加了–locale en改成英文环境了,这里以英文环境为准。)

newproject

        选择Maven Project后,单击下一步,展开Archetypes from remote Maven repositories,如图所示,选择Tapestry5 quickstart archetype。

quickstart

       选择Tapestry5 quickstart archetype后,单击下一步,如图填一些定制的参数后,单击完成。

parameters

       maven插件会下载依赖库并根据定制的参数新建项目,项目建好后,如图所示文件结构。

file

运行项目需要web server,这里我选择了maven中的jetty插件,想让项目运行时运行jetty,这就需要修改运行项目时执行的maven命令,选择项目后,右键选择properties,选择Actions,在actions列表中选择run project,如图所示,修改Excute Goals为jetty:run。

jettyrun

       这样我们运行项目就可以直接将项目部署到jetty并启动jetty了,单击工具栏上的Run Main Project(快捷键F6),第一次运行maven会下载需要的插件,下载完会启动jetty,这时访问http://localhost:8080,可以看到如图所示页面。

run

      单击我们部署的项目mavenproject1,可以看到项目成功运行,如图所示。

mavenproject1

     这时编辑页面模板并保存,刷新页面会立即看到结果,我们知道Tapestry5支持类的自动重加载的,在修改页面类文件后保存,刷新页面并没有看到修改后的结果,其实这里需要编译类文件,同样我可以通过定制Build Project的maven命令来编译项目,如图所示,修改build project中Excute Goals为compiler:compile。

build

     这样我们编辑完类文件保存后,就可以通过单击工具栏上的Build Main Project(快捷键F11)来编译项目了,这时刷新页面就可以看到修改后的结果。

toolbar

    到这里已经可以开发Tapestry5项目了,可是打开tml文件,什么语法加亮都没有,这就要修改netbeans配置,来让netbeans支持tml文件,选择菜单Tools->Options,在打开的窗口左下角单击Advance Options按钮,打开IDE Configuration->System->Object Types,选择HTML Objects,在选项Extension and MIME Types中,单击右边按钮,打开配置对话框,在Item输入框中输入tml,单击Add,加入到下边的列表后,单击ok保存设置,如图所示。

tml

这时就可以看到Index.tml已经被系统识别为HTML Objects了,打开文件可以像编辑html一样编辑tml文件了,netbeans支持html的语法加亮和基本的元素选择,如图所示。

html

这样就可以在netbeans中建立起完整的Tapetry5开发环境了, netbean中的插件现在已经很好很全了,对javascript和css也支持的很好,虽然比不上DW,但已经很不错了,希望netbeans越来越好。

      转载请注明出处Tapestry5.com

If you enjoyed this post, make sure you subscribe to my RSS feed!

Tapestry5-如何在根目录下加载组件模板

05月 14th, 2008 No Comments   Posted in 学习笔记, 源码研究

     T5默认的组件模板是从WEB-INF目录加载的,实际开发中,希望组件模板可以放在根目录,例如组件类目录package.components.layout.DefaultLayout,对应的模板为layout/DefaultLayout.tml。

      T5的模板加载是通过PageTemplateLocator加载的,我们可以通过覆盖这个Service的实现来达到我们的目的,首先是实现类:

import static java.lang.String.format;
 
import java.util.Locale;
 
import org.apache.tapestry.internal.InternalConstants;
import org.apache.tapestry.internal.services.PageTemplateLocator;
import org.apache.tapestry.ioc.Resource;
import org.apache.tapestry.model.ComponentModel;
 
public class ContextRootTemplateLocator implements PageTemplateLocator {
 
    
private final Resource contextRoot;
 
    
private final String compomentPackage;
 
    
private final String pagePackage;
 
    
public ContextRootTemplateLocator(Resource contextRoot,
            
String appRootPackage) {
        
this.contextRoot = contextRoot;
        
this.compomentPackage = appRootPackage + "."
                +
InternalConstants.COMPONENTS_SUBPACKAGE;
        
this.pagePackage = appRootPackage + "."
                +
InternalConstants.PAGES_SUBPACKAGE;
 
    
}
 
    
public Resource findPageTemplateResource(ComponentModel model, Locale locale) {
 
        
String className = model.getComponentClassName();
        
if (className.contains(pagePackage)) {
            
return findPageTemplateResourceDelegate(className, locale);
        
}
        
if (className.contains(compomentPackage)) {
            
return findComponentTemplateResourceDelegate(className, locale);
        
}
        
return null;
    
}
 
    
private Resource findPageTemplateResourceDelegate(String className,
            
Locale locale) {
        
String logicalName = className.substring(pagePackage.length() + 1)
                .
replace('.', '/');
        
return locateFile(logicalName, locale);
    
}
 
    
private Resource findComponentTemplateResourceDelegate(String className,
            
Locale locale) {
        
String logicalName = className.substring(compomentPackage.length() + 1)
                .
replace('.', '/');
        
return locateFile(logicalName, locale);
    
}
 
    
private Resource locateFile(String logicalName, Locale locale) {
        
String path = format("%s.%s", logicalName,
                
InternalConstants.TEMPLATE_EXTENSION);
        
return contextRoot.forFile(path).forLocale(locale);
    
}
 
}

在module中设置覆盖掉默认的PageTemplateLocator实现

public PageTemplateLocator buildContextRootTemplateLocator(
            @
InjectService("ContextAssetFactory") AssetFactory contextAssetFactory,
            @
Inject @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM) String appRootPackage) {
        
return new ContextRootTemplateLocator(contextAssetFactory
                .
getRootResource(), appRootPackage);
    
}
 
    @
SuppressWarnings("unchecked")
    
public static void contributeAlias(
            
Configuration<AliasContribution> configuration,
            @
InjectService("ContextRootTemplateLocator") PageTemplateLocator contextRootTemplateLocator) {
        
configuration.add(AliasContribution.create(PageTemplateLocator.class,
                
contextRootTemplateLocator));
    
}

这样就可以在根目录下加载组件类的模板了。

转载请注明出处tapestry5.com。

If you enjoyed this post, make sure you subscribe to my RSS feed!

Tapestry5每日播报(20080512)

05月 12th, 2008 No Comments   Posted in 邮件列表

1.介绍Tapestry5的新文章发布Tapestry for Nonbelievers,写的很好,推荐大家阅读。

2.邮件列表T5.0.11: onActivate() called twice, more questions,问题跟Tapesetry5的路径问题有关,这个也是一直困扰我的地方,例如生成的url为

http://localhost:8607/myApp/start/testmessage,图像路径为myApp/images/image.jpg,如果使用相对路径<img src=”images/image.jpg”/>,生成的图片url则为http://localhost:8607/myApp/start/images/image.jpg, 改为<img src=”/images/image.jpg”/>则可正常显示,也就是说开发的应用只能放在根目录,无法部署到目录中,

不知道有没有什么两全的方式解决。

3.邮件列表T5: Calling method with parameter in prop,在T4升级到T5的过程中,碰到了prop中无法执行函数的问题,T5Components中有个ognl binding,可以重新使用ognl取值。

If you enjoyed this post, make sure you subscribe to my RSS feed!

Tapestry5开发系列:如何在Eclipse中运行jetty

05月 10th, 2008 1 Comment   Posted in 开发工具

Jetty是个类似tomcat的web server,体积小、启动快、可内嵌,开发中使用起来很方便,eclipse的插件中支持jetty的有个jettylauncher,可jettylauncher只支持eclipse2.x/jetty5.x(有人hack了代码,可以支持高版本的eclipse,但还是支持不了jetty6.x)。现在支持jetty6的有个runjettyrun插件,支持最新版本的eclipse和jetty,而且其本身就自带jetty6,不需要单独下载和配置jetty了,runjettyrun插件的安装和使用请参考这里

我在使用Runjettyrun运行tapestry5开发的程序时,碰到了些问题,具体的问题和解决方法如下。

问题1、默认runjettyrun的配置运行时,控制台没任何提示,其本身也没有运行起来。

解决方法:在配置中,选择classpath标签,在user entries中删除掉项目本身,如图所示:

问题2、问题1解决后,再次运行会提示找不到类javax.servlet.http.HttpServletRequest,这个简单添加个servlet.jar就可以了。

好了,jetty可以运行了,还有个配置时开发中一定要加的,tapestry5有个production-mode,默认的为true,可以在作为产品发布时,提供精简的错误信息,在开发时,异常信息当然是越精确越好,而且精确的异常信息也是tapestry的强项,可以很准确的告诉您错误出在哪里,所以在开发时这个选项要关掉,选中运行配置中的arguments标签,在vm
arguments中添加-Dtapestry.production-mode=false,如下图所示:

这样就可以打开详细的错误信息报告了,Tapestry5有更改页面和组件类不需要重启服务器的特性,运行jetty后,就像用script语言开发一样,尽情享受开发的乐趣吧。

转载请注明出处www.tapestry5.com,拜托将图片配置好,谢谢。

If you enjoyed this post, make sure you subscribe to my RSS feed!

Tapestry5每日播报(20080509)

05月 9th, 2008 No Comments   Posted in 邮件列表

Tapestry5每日播报(20080509)
1.变量命名中的下划线正在被移除,具体原因看下作者解释
PS:终于去掉下划线了,其实各有利弊,我是不用的,那个wrap作者在为什么不喜欢Tapestry5的文章里也提到了这点。
2.邮件列表里有人问道Tapestry5什么时候能够release,作者回答说估计下个周可以。
3.作者在blog中提到更新了Tapestry5的官方教程,查看新教程

每日播报的信息来自于邮件列表,信息同时发布于Tapestry圈子

If you enjoyed this post, make sure you subscribe to my RSS feed!

如何在dreamweaver中打开Tapestry5的tml模板文件

05月 8th, 2008 No Comments   Posted in 开发工具

    Tapestry从5.0.6开始使用tml作为模板文件的扩展名,但在dreamveaver中无法打开tml文件,在网上找了些资料,终于可以在dreamveaver中像修改html文件一样修改tml文件了,现整理下设置过程:

  1. 1、使Dreamweaver能识别*.tmp文件,并当做html页面来处理,需要修改两个文件,
    1. (1).Extensions.txt——位于你的用户目录下,位于dreamveaver安装目录下的configuration文件夹下。
    2. (2). MMDocumentTypes.xml—-位于dreamveaver安装目录下的configuration\DocumentTypes文件夹下
  2. 2、用编辑器打开Extensions.txt,使用替换功能,把XHTML替换成XHTM,TMP。替换应该只有两处,一处是所有文档里面;另一处是第二行,:HTML 文档中。需要注意的是,文档类型要用大写,如TMP,而不是tmp。保存退出。
    修改后的文件前两行如下
    HTM,HTML,SHTM,SHTML,HTA,HTC,XHTML,TML,STM, SSI,JS,AS,ASC,ASR,XML,XSL,XSD,DTD,XSLT,RSS,RDF,LBI,DWT,ASP,ASA,ASPX,ASCX, ASMX,CONFIG,CS,CSS,CFM,CFML,CFC,TLD,TXT,PHP,PHP3,PHP4,PHP5,JSP,WML,TPL,LASSO, JSF,VB,VBS,VTM,VTML,INC,JAVA,EDML,MASTER:所有文档
    HTM,HTML,HTA,HTC,XHTML,TML:HTML 文档
  3. 3、用编辑器打开MMDocumentTypes.xml,找到下面部分,并添加tml,修改后如下:
    <documenttype id="HTML" internaltype="HTML" winfileextension="html,htm,shtml,shtm,stm,tpl,lasso,xhtml,tml" macfileextension="html,htm,shtml,shtm,tpl,lasso,xhtml,ssi,tml" file="Default.html" writebyteordermark="false">

    保存退出。winfileextension指的是在windows系统中的扩展,macfileextension是mac os系统中的扩展

  4. 4、如果你想使DW成为*.tml的默认编辑器,就可以把*.tml文件和DW默认关联起来,方法就是打开编辑->首选参数->文件类型\编辑器,找到*.tml扩展名,如果没有就新建一个,然后“更改”,找到DW,就把两者关联起来了, 经过这样设置,DW就可以识别*.tml文件,并当作*.html来处理。

If you enjoyed this post, make sure you subscribe to my RSS feed!

Hello world!

05月 8th, 2008 1 Comment   Posted in 未分类

Tapestry5.com开始运行了,也hello world下。

If you enjoyed this post, make sure you subscribe to my RSS feed!