【问题标题】:creating simple reusable component in Apache Tapestry5在 Apache Tapestry5 中创建简单的可重用组件
【发布时间】:2013-07-24 20:37:56
【问题描述】:

我正在使用 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 (或者它需要在我的自定义组件中实现更多的东西?)

【问题讨论】:

  • 你的模板文件是以大写字母开头的(TestComp.tml)还是不是(testComp.tml)?
  • 确实,我会尽快检查是否有问题。
  • 好的,你是对的,sody,改变 testComp 文件名的大小写是关键。感谢您指出。
  • 你应该标记答案;是的,Tapestry 在这一领域是区分大小写的:处理文件系统。
  • 需要明确的是,模板文件的名称必须与 Java 类的名称完全匹配(但具有.tml 扩展名)。

标签: components custom-component tapestry


【解决方案1】:

您是否提供了完整的 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 文件。在这种情况下,请按照 Getting Started 页面上的分步指南进行操作。

【讨论】:

  • 感谢您的回复。首先 - 我没有附上完整的 index.tml 文件,但它应该是正确的,因为我正在通过从 maven 存储库修改官方模板应用程序来执行我的测试,并且通常它正在工作,只是我的修改不想(不要't 显示我的组件,页面的其余部分正常加载)。其次 - 我将尝试按照您提供的示例初始化我的组件 - 使用 DIV 元素。
猜你喜欢
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2018-08-24
  • 1970-01-01
  • 2014-08-26
  • 2016-03-10
  • 2023-03-20
相关资源
最近更新 更多