Tapestry5 Ajaxformloop限制行数

时间:2015-07-20 14:20:21

标签: java tapestry

我试图限制用户可以在ajaxformloop中添加的行数。

简短示例:

例如,在tapestry 5文档中找到的循环:http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/AjaxFormLoop.html

例如,如果我只希望用户能够输入3个电话号码,该怎么办?

我尝试了什么:

1)我尝试从onAddRow事件返回null,这会导致异常并显示异常报告页面 - 这些事件不应该返回null我不会想。

2)我尝试添加我自己的添加行按钮,如下所示:

<p:addRow>
    <t:addrowlink>Add another</t:addrowlink>
</p:addRow>

然后放一个t:如果在它周围,就像这样:

<t:if test="canAddMorePhones()">    
    <p:addRow>
        <t:addrowlink>Add another</t:addrowlink>
    </p:addRow>
</t:if>

在这种情况下,&#34;添加另一个&#34;恢复为默认&#34;添加行&#34;按钮和我的添加行链接不显示。

3)我试着移动它:如果在里面,这有类似的结果。

--------------------------

我确信这是一个相当普遍的目标,有没有简单的方法呢?也许有人可以提供一个例子,如果可能的话,这有助于进入文档,因为我确信我不会成为唯一一个尝试这样做的人。

注意:我也曾在T5用户邮件列表上询问并得到了一个答案,但在Lance的回复之后我似乎无法正常工作(我相信这可能是正确的,但我和#39;我不知道如何根据我上周的回复使用AjaxResponseRenderer,这可能是由于我自己的技术限制或对T5某些部分的理解。

http://apache-tapestry-mailing-list-archives.1045711.n5.nabble.com/Ajaxformloop-add-row-link-max-size-tt5730840.html

1 个答案:

答案 0 :(得分:1)

我也尝试使用ajaxResponseRenderer.addRender,就像您在邮件列表代码中所做的那样,但它不起作用,因为它似乎Tapestry has some problems dealing with updating a component that's busy updating another component。但是,AjaxResponseRenderer也支持执行JavaScript。在文档中的AjaxFormLoop示例中采用此方法,请按以下方式指定addrowlink

<p:addrow>
    <t:if test="canAddMorePhones()">
        <t:addrowlink id="addRowLink" t:id="addRowLink">Add another</t:addrowlink>
    </t:if>
</p:addrow>

然后在return phone;中的onAddRowFromPhones()之前添加以下代码:

ajaxResponseRenderer.addCallback(new JavaScriptCallback() {
    public void run(JavaScriptSupport javascriptSupport) {
        if (!canAddMorePhones()) {
            javascriptSupport.addScript("document.getElementById('addRowLink').style.display = 'none';");
        }
    }
});

此示例已在Tapestry 5.3.7中成功测试。