Tapestry5之页面显示
这是一篇相对来说更加杂乱的文章了。基于最近的一个项目,把一些碰到的问题记下来。
1 t:Output和t:OutputRaw
他俩长得很像,但是差别不小。
Output是一个至少要有两个参数的Component,分别为:value和format。
Format就是java.text.Format。可以有两种方式来设定
a,在页面中,如:format="literal:yyyy-MM-dd";
b,在java类中声明,如:
@Property private Format someFormat = new SimpleDateFormat("yyyy-MM-dd");
tml中:format="someFormat";
而OutputRaw只需要一个参数,就是value。它有另外一个特点,就是假如你给他设定的value值有特殊符号,它能够解析出来。
2 t:Loop 有两个必须的参数,source和value。
source,是一个实现了Iterable接口的类型。
value,这个有些意思。
如果我们写成
<t:loop t:source="someSource" t:value="someValue"> some html code </t:loop>
那么,我们需要在java代码中有一个@Property private String sameValue。
如果我们这个Loop就仅仅是为了显示,我们可以这样来写:
<t:loop t:source="someSource" t:value="var:someValue"> some html code with "var:someValue" as an Entity </t:loop>
这样的话,不需要再java代码中有someValue这个属性了。
究其原因,与Loop.java中的
@Parameter(principal = true) private T value;
相关。这个@Parameter的String defaultPrefix() default BindingConstants.PROP;所以把它当成一个变量了。而修改为var的话,
Allows for temporary storage of information during the render only。
3 如果我们循环的一个实体中有一个属性还是一个可以循环的实体,这个时候代码应该如下:
<t:loop t:source="source" t:value="one"> ${one.letters} <t:loop t:source="one.numbers" t:value="var:number"> ${var:number} </t:loop> </t:loop>
以上粗体蓝色部分,万万不能加上${}否则就会被解析成一个字符串了。