我有一个用tapestry 5开发的项目。 我需要使用AJAX请求更新输入字段(在表单内)。
Page.tml就像这样:
<form>
<t:zone t:id="myZone">
<input type="text" t:type="TextField" t:value="product.code"/>
</t:zone>
<t:actionlink t:id="generateCode" zone="myZone">Generate</t:actionlink>
</form>
和Page.java
Object onActionFromGenerateCode() {
return myZone.body();
}
单击“生成”链接时,tapestry会抛出异常。不要让我更新表单中的区域:
java.lang.RuntimeException
The component must be enclosed by a Form component.
如何更新此输入字段?
感谢
答案 0 :(得分:2)
通过ajax更改表单片段变得棘手,因为FormSupport实例必须在服务器端事件中的Environment上可用。
可能更容易:
以下是选项2的工作原理:
TML
<form>
<input id="productCode" type="text" t:type="TextField" t:value="product.code" />
<!-- note that async is a recent addition to eventlink in tapestry 5.4 -->
<!-- Use a dummy zone for previous versions -->
<t:eventlink event="generateCode" async="true">Generate</t:eventlink>
</form>
爪哇
@Inject JavaScriptSupport jss
void onGenerateCode() {
String productCode = generateProductCode();
jss.addScript("$('#productCode').val('%s');", productCode); // assuming jquery
}
请注意,可以通过ajax动态更改表单,它就像我说的那样棘手。示例包括AjaxFormLoop和FormInjector