代码之家  ›  专栏  ›  技术社区  ›  ponzao

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

  •  2
  • ponzao  · 技术社区  · 14 年前

    我当前的问题是在 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,但我不知道如何实现这一点。

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

    1 回复  |  直到 12 年前
        1
  •  1
  •   Steve Eynon Henning    12 年前

    使用上下文参数传递动态值不是我的第一个选项。(The 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();
    }
    

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