在Apache Tapestry5中创建简单的可重用组件

时间:2013-07-24 20:37:56

标签: components custom-component tapestry

我正在使用Apache Tapestry5开始冒险。我正在尝试制作简单的组件(用于测试),由一对Textfields组成。组件名为“TestComp”。我有以下要素:

testComp.tml

<t:container 
    xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
    <p>
        <input t:type="TextField" t:id="testOne" t:value="testOne.input"/><br/>
        <input t:type="TextField" t:id="testTwo" t:value="testTwo.input"/><br/>
    </p>
</t:container>

TestComp.java

public class TestComp {

    private DataContainer testOne;

    private DataContainer testTwo;

    @SetupRender
    public void setup(){
        testOne = new DataContainer();
        testTwo = new DataContainer();
    }

    public String getContentOfTestOne() {
        return testOne.getInput();
    }

    public String getContentOfTestTwo() {
        return testTwo.getInput();
    }

    public DataContainer getTestOne() {
        return testOne;
    }

    public void setTestOne(DataContainer testOne) {
        this.testOne = testOne;
    }

    public DataContainer getTestTwo() {
        return testTwo;
    }

    public void setTestTwo(DataContainer testTwo) {
        this.testTwo = testTwo;
    }
}

然后我试图在其他地方使用它,例如在index.tml中:

<form t:type="form" t:id="out">
        <t:testComp />
        <br/><input type="submit" value="Component"/>
</form> 

根据我发现的数十种材料和示例(说实话,它不同于我的情况),这样的实现应该会在表单中显示testComp元素,但不幸的是,按钮上方没有任何渲染(虽然挂毯没有崩溃)。我错过了什么?我是否能够输入TestComp类型的Index.java属性并将其与我的

绑定
<t:testComp /> 
在index.tml中通过id

(或者它需要在我的自定义组件中实现更多内容?)

1 个答案:

答案 0 :(得分:0)

您是否提供完整的index.tml文件?如果是这样,您将缺少tapestry命名空间以及正确设置的html文档。请尝试以下方法:

Index.tml

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
    <head>
        <title>My page</title>
    </head>
    <body>
        <form t:type="form" t:id="out">
            <div t:id="testComp" />
            <br/><input type="submit" value="Component"/>
        </form>
    </body>
</html>

在Index.java中,您可以使用它来访问您的组件。

@component(id="testComp")
private TestComp testComp;

如果这不起作用,您的配置或设置可能有问题,您可能只是在查看一个完全没有由tapestry处理的静态tml文件。在这种情况下,请按照Getting Started页上的分步指南进行操作。