0

我正在使用 Apache Tapestry5 开始冒险。我正在尝试制作由一对文本字段组成的简单组件(用于测试)。组件名为“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 (或者它需要在我的自定义组件中实现更多的东西?)

4

1 回答 1

0

您是否提供了完整的 index.tml 文件?如果是这样,则您缺少 Tapestry 命名空间以及正确设置的 html 文档。尝试以下操作:

索引.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 文件。在这种情况下,请按照入门页面上的分步指南进行操作。

于 2013-07-25T07:23:14.850 回答