动态修改 Tapestry 5 中的 FormInjector 上下文信息
我当前的问题是在 FormInjector
中动态更新上下文信息,我之前的问题 在 Tapestry 5 中更新表单内的区域可能包含有用的背景信息。
我在我的模板中添加了以下内容。
<div t:type="FormInjector" t:id="injector" t:context="item.id"/>
以及我的组件类中的以下内容。
@OnEvent(component = "injector")
Block loadItemFields(String id) {
item = itemRepository.find(id);
return itemFieldsBlock;
}
一切工作正常,出现新的表单字段,但搜索始终使用相同的 id
完成。我想在触发事件之前用 JavaScript 更改 id
,但我不知道如何实现这一点。
如果需要其他信息,我很乐意提供。
My current problem regards updating context information dynamically in FormInjector
, my previous question Updating a zone inside a form in Tapestry 5 probably contains useful background information.
I added the following in my template.
<div t:type="FormInjector" t:id="injector" t:context="item.id"/>
And the following in my component class.
@OnEvent(component = "injector")
Block loadItemFields(String id) {
item = itemRepository.find(id);
return itemFieldsBlock;
}
Everything is working fine, new form fields appear, but the search is always done with the same id
. I would like to change the id
with JavaScript before triggering the event, but I don't know how to achieve this.
If there is additional information required I am happy to supply it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用上下文参数传递动态值不是我的第一选择。 (
FormInjector
组件生成一个 URL 来触发事件处理程序,然后该事件处理程序包含上下文 - 然而,这是在组件渲染时完成的,并不意味着是动态的。)我会摆脱上下文参数并找到不同的方式来提交值。一种可能是通过 AJAX 提交表单并在回调中触发注入:
这样,当您触发表单注入时,表单元素的值已在服务器端设置,您可以在注入事件中使用它处理程序。
Using the context parameter to pass a dynamic value wouldn't be my first option. (The
FormInjector
component generates a URL to trigger the event handler, which then includes the context - however, this is done when the component renders, and is not meant to be dynamic.)I'd get rid of the context parameter and find a different way to submit the value. One possibility would be to submit the form via AJAX and trigger the injection in the callback:
That way, the value of the form element has been set on the server side when you trigger the form injection, and you can use it in your injection event handler.