如何通过AJAX请求更新tapestry中的<input />字段

时间:2015-01-14 20:57:16

标签: ajax tapestry

我有一个用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.

如何更新此输入字段?

感谢

1 个答案:

答案 0 :(得分:2)

通过ajax更改表单片段变得棘手,因为FormSupport实例必须在服务器端事件中的Environment上可用。

可能更容易:

  1. 将整个表单放在一个区域中并刷新整个表单
  2. 从服务器端事件
  3. 执行一些javascript

    以下是选项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动态更改表单,它就像我说的那样棘手。示例包括AjaxFormLoopFormInjector