我正在使用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 (或者它需要在我的自定义组件中实现更多内容?)
答案 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页上的分步指南进行操作。