我试图限制用户可以在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某些部分的理解。
答案 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中成功测试。