我有一个显示记录的循环,我想向所有行添加提交按钮。他们需要提交的原因是因为当用户选择其中一个按钮时,我希望在底部有一个表单。
我已经看过关于使用延迟等的评论,但似乎没有什么对我有用。我正在尝试的当前提交代码是:
<input t:id="deleteItem" t:type="submit" t:context="item.number.content" value="deleteItem" class="deleteItem" />
扩展上下文: 我列出的当前上下文只是item对象中number对象中的一个字符串。事实上,它在上面的代码中显示完全正常。
为了对此进行不同的测试,我使用getContext()方法替换了item.number.content并让它返回一个硬编码的1.然后调试此方法并在页面被提交时看到它被调用,而不是当页面按照我的预期呈现时。
直到按下按钮后才会填充上下文。我误解了什么吗?
编辑:
所以我的问题是获取上下文值。以我的代码为例:
<t:loop source="itemsList" value="item" formState="none">
<!-- Display info here -->
<input t:id="deleteItem" t:type="submit" t:context="myContext" value="deleteItem" class="deleteItem" />
</t:loop>
getMyContext的定义是:
public String getMyContext() {
String context = item.getNumber().getContent();
return context;
}
问题是,直到按下提交后才调用该方法,此时变量“item”为空。我希望每次呈现提交按钮时都会调用getMyContext,然后在选择提交时,将使用适当的上下文触发事件。这有意义吗?
答案 0 :(得分:3)
我终于弄清楚我的问题是什么:
formState="none"
我最初这样做是因为它在我的对象和字符串之间进行翻译时遇到了麻烦。选择此选项后,提交按钮无法正常工作。我最终将它更改为formState =“iteration”,现在它正如我预期的那样工作(我也需要按预期推迟)。
答案 1 :(得分:1)
尝试将以下内容添加到您添加的页面/组件中:提交到:
@OnEvent(component = "deleteItem")
private void handleSubmit(Integer contextValue) {
//Do whatever you need to do with the passed context value here.
//Most commonly you would store the context in a java page/component field to
//be used by the form eventhandler to do some sort of CRUD
}
在呈现页面时不会写出上下文值,它将在提交表单时作为参数传递给事件处理程序。所以你所看到的是正确的行为。