自定义组件
与页面不同的时,组件的构成是html文件,jwc文件,还有java文件。Java文件必须继承BaseComponet接口,而Jwc文件的作用类似page文件,只是声明不同:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE component-specification
PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<component-specification class="com.tapestry.jwc.Test" allow-body="yes" allow-informal-parameters="yes">
</component-specification>
在这里,class="com.tapestry.jwc.Test"参数指定了组件对应的java文件,allow-body="yes"参数含义是该组件是否有body,而allow-informal-parameters="yes"参数指定该组件是否能够使用HTML参数。
要使用自定义组件,可以将jwc文件与其它page文件放在一起,然后在application文件中指定HTML文件到jwc文件的映射:
<component-type type="Test" specification-path="/WEB-INF/jwc/Test.jwc"/>
也可以将自定义组件放在其它地方或者打包为jar文件
这时,需要在web-inf目录下的application文件中定义组件包的路径:
<library id="my" specification-path="/com/tapestry/jwc/my.library"/>
然后再在my.library文件中定义组件HTML到jwc文件的映射:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library-specification
PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<library-specification>
<description>Project specific components</description>
<component-type type="Test" specification-path="Test.jwc"/>
</library-specification>
.html文件
<input type="text" jwcid="@Any" id="printType" name="printType" value="ognl:printType" style="display:none"/>
.jwc文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<component-specification class="com.jwc.AcctPrinter"
allow-body="no"
allow-informal-parameters="no">
<parameter name="printType"
direction="in"
type="java.lang.String"
required="yes"/>
</component-specification>
自定义组件是为了重用组件了,就像公共代码