例子中源码包的结构说明:
Tapestry使用注意点:
1、 保证工程的编码与页面的编码都是一致的,例如utf-8,否则可能会报Invalid byte 3 of 3-byte的错误。
2、 tapestry不支持 等html特殊符号,会报类似这个错误“undeclared general entity "nbsp"”,解决办法是在tml里边添加上xhtml的头文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3、 在pages包下的properties文件,相当于是对页面文件的进一步详细配置,里面可以对页面中的属性字段的名称进行配置,也可以对form提交中的字段进行校验。
其中:属性名-label=*** 这个是页面上实际显示的名称
属性名-regexp=*** 这个是该属性的校验规则
属性名-regexp-message=*** 这个是校验时的提示信息
4、 页面对应的类文件中,对session操作需要注意,session应该用@Inject注入。
5、 如果是在services包下的数据库操作类中,对session的更新或保存操作,仅有@CommitAfter的注释是不行的,无法保存数据。在方法上标注 @CommitAfter 注解之后,你需要告诉 Tapestry 去通知这些方法,所以需要在AppModule类中,加入
@Match("*Dao")
public static <T> T decorateTransactionally(HibernateTransactionDecorator decorator, Class<T> serviceInterface,T delegate, ServiceResources resources){
return decorator.build(serviceInterface, delegate, resources.getServiceId());
}
6、 页面显示字段的顺序按照类中get方法的顺序显示,若要提前显示某个字段,需将该字段的get方法提前到相应的位置。
7、 在实体类的字段上加上@NonVisual注释,页面调用时,就不会显示该字段。
8、 如果只集成hibernate,web.xml配置如下:
<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
配置后还需要把有关spring的tapestry的jar包删掉,不然启动会报错误。如果还集成了spring,web.xml配置如下:
<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class>
</filter>
9、 css和js可以在模板文件中引入
<link href="${asset:css/table.css}" rel="stylesheet" type="text/css"/>
也可以在模板文件对应的java类中,通过注释引入
@Import(stylesheet="context:css/site.css")
public class MyComponent
{
}
10、 在启动时就获得hibernate,而不是在第一次请求时加载hibernate,需要在AppModule类中加入一个配置项:
configuration.add(HibernateSymbols.EARLY_START_UP, "true");