有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态修改Tapestry 5中的FormInjector上下文信息

我当前的问题是在FormInjector中动态更新上下文信息,我前面的问题Updating a zone inside a form in 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,但我不知道如何实现这一点

如果需要其他信息,我很乐意提供


共 (1) 个答案

  1. # 1 楼答案

    使用上下文参数传递动态值不是我的第一个选择。(组件FormInjector生成一个URL来触发事件处理程序,事件处理程序随后包括上下文-但是,这是在组件呈现时完成的,并不意味着是动态的。)

    我将去掉上下文参数,并找到另一种提交值的方式。一种可能是通过AJAX提交表单并在回调中触发注入:

    this.myFormElement.observe('change', this.onChange.bindAsEventListener(this));
    
    ...
    
    onChange: function(event) {
        this.myFormElement.form.request({
               onSuccess: this.afterFormSubmitted.bind(this)
        });
    },
    
    afterFormSubmitted: function() {
       this.formInjector.trigger();
    }
    

    这样,当您触发表单注入时,表单元素的值已经在服务器端设置好,您可以在注入事件处理程序中使用它