【问题标题】:Component binding through MarkupWriter - Tapestry通过 MarkupWriter 绑定组件 - Tapestry
【发布时间】:2016-07-25 14:55:36
【问题描述】:

我目前处于需要使用MarkupWriter 来创建复选框而不是使用.tml 的情况。但这是在组件内部,我想将复选框的值绑定到父级的布尔值。本质上是这样的:

组件

public class InnerComponent {
    @Parameter
    private boolean booleanValue;

    void afterRender(final MarkupWriter writer) {
        writer.element("input", "type", "checkbox");
        writer.end();
    }
}

调用页面

public class OuterPage {
    @Property
    private boolean checkboxValue;

    @InjectComponent
    private Zone booleanZone;

    Object onDisplayBoolean() {
        return booleanZone.getBody();
    }
}

使用 .tml

<html t:type="layout" title="testProject Index" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd">
    <t:InnerComponent booleanValue='checkboxValue'/><br/>

    <t:eventlink event='displayBoolean' zone='booleanZone'>Update</t:eventlink>

    <t:zone t:id='booleanZone' id='booleanZone'>
        ${checkboxValue}
    </t:zone>
</html>

组件的MarkupWriter 目前只是写出一个简单的复选框。但它也接收布尔值作为参数。我将如何将布尔参数绑定到MarkupWriter 生成的复选框?

在这个简单的示例中,选中复选框,然后通过EventLink 更新Zone 应该会显示父级checkboxValue boolean 的更新值。

【问题讨论】:

    标签: java data-binding tapestry


    【解决方案1】:

    通过Tapestry的源代码筛选,我找到了一个的解决方案。我的组件应该首先扩展AbstractField,然后处理控件的提交。用更新的值重新分配值。编辑后如下图:

    public class InnerComponent extends AbstractField {
        @Property
        @Parameter
        private boolean booleanValue;
    
        @BeginRender
        void begin(final MarkupWriter writer) {
            writer.element("input", "type", "checkbox",
                    "name", getControlName(),
                    "id", getClientId(),
                    "checked", booleanValue ? "checked" : null);
            writer.end();
        }
    
        @Override
        protected void processSubmission(String controlName) {
            String postedValue = request.getParameter(controlName);
            booleanValue = postedValue != null;
        }
    }
    

    这样我实际上是在重新实现复选框逻辑。与.tml 不同,我可以使用现有的Tapestry Checkbox 组件。如果有更好的解决方案,比如使用现有的 Checkbox 组件,我会很高兴听到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2018-12-12
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      相关资源
      最近更新 更多