如何在ZK中自定义组件标签

时间:2016-08-30 10:44:15

标签: java zk

Haii我需要帮助,我想在zk中自定义Label组件并且我想添加一个属性,当我设置mandatory =“true”时,将出现asterix符号,如果我设置为mandatory =“false “asterix符号消失了,我正在尝试这样:

{{1}}

但条件不起作用,如何解决?

1 个答案:

答案 0 :(得分:1)

您可能想要的是一个HtmlMacroComponent,它结合了标签和文本框......

你从一个zul文件开始:

<zk>
<label id="mcLabel"/><textbox id="mcTextbox"/>
</zk>

...并为它创建一个组件......

public class MyTextbox extends HtmlMacroComponent {

    @Wire("#mcTextbox")
    private Textbox textbox;

    @Wire("#mcLabel")
    private Label label;

    private String caption;

    private boolean mandatory;

    public MyTextbox() {
        compose(); // this wires the whole thing
    }

    public void setMandatory(final boolean value) {
        mandatory = value;
        updateCaption();
    }

    public boolean isMandatory() {
        return mandatory;
    }

    public void setCaption(final String value) {
        caption = value;
        updateCaption();
    }

    public String getCaption() {
        return caption;
    }

    protected void updateCaption() {
        label.setValue(mandatory ? caption + "*" : caption);
    }

    public String getValue() {
        return textbox.getValue();
    }

    public void setValue(final String value) {
        textbox.setValue(value);
    }

}

...现在您可以使用它,例如在zul文件的顶部定义它...(根据需要调整包和.zul名称):

<?component name="mytextbox" macroURI="/zk/textbox.zul" class="com.example.MyTextbox"?>

...所以你可以简单地使用它......

<mytextbox id="name" value="Frank N. Furter" caption="Your name" mandatory="true"/>

稍后你可以为它定义语言插件......

    我的语言,插件     XUL / HTML              mytextbox         com.example.MyTextbox         /zk/textbox.zul     

...因此您不需要将定义放在您使用它的每个.zul文件的顶部。有关详情,请参阅documentation

当然,你也只能创建一个新标签等,但我发现很好的想法是为那些组合各种组件的作业创建MacroComponents,因为这样,例如,你也可以自动添加验证等。