Java 如何在ZK中自定义组件标签
Haii我需要帮助,我想在zk中自定义标签组件,我需要添加一个属性,当我设置mandatory=“true”时,该属性是必填属性,此时将显示星号,如果我设置mandatory=“false”,星号将消失,我正在这样尝试:Java 如何在ZK中自定义组件标签,java,zk,Java,Zk,Haii我需要帮助,我想在zk中自定义标签组件,我需要添加一个属性,当我设置mandatory=“true”时,该属性是必填属性,此时将显示星号,如果我设置mandatory=“false”,星号将消失,我正在这样尝试: private Label label; private Label sign; private String lblValue; private String REQUIRED_SIGN = " *"; private boolean mand
private Label label;
private Label sign;
private String lblValue;
private String REQUIRED_SIGN = " *";
private boolean mandatory;
public SignLabelCustom()
{
label = new Label();
label.setSclass("form-label");
appendChild(label);
sign = new Label();
if(mandatory=true){
sign.setValue(REQUIRED_SIGN);
sign.setStyle("color: red");
appendChild(sign);
}
else{
sign.setValue("");
sign.setStyle("color: red");
removeChild(sign);
}
}
public String getValue() {
return lblValue;
}
public boolean isMandatory() {
return mandatory;
}
public void setMandatory(boolean mandatory) {
this.mandatory = mandatory;
}
public void setValue(String lblValue) {
label.setValue(lblValue);
this.lblValue = lblValue;
}
但是这个条件不起作用,怎么解决呢?你可能想要的是一个HtmlMacroComponent,它结合了一个标签和一个文本框 从zul文件开始:
<zk>
<label id="mcLabel"/><textbox id="mcTextbox"/>
</zk>
…现在您可以使用它,例如在zul文件顶部定义它。。。(根据需要调整包和.zul名称):
…所以你可以简单地使用它
<mytextbox id="name" value="Frank N. Furter" caption="Your name" mandatory="true"/>
以后你可以为它定义一个语言插件
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);
}
}
我的语言插件
xul/html
我的文本框
com.example.MyTextbox
/zk/textbox.zul
…这样,您就不需要再将定义放在每个使用它的.zul文件的顶部。有关这方面的更多信息,请参阅
当然,您也只能创建一个新标签等。但我发现为那些组合了各种组件的作业创建宏组件是一个好主意,因为这样,例如,您还可以自动添加验证等。您可能需要的是一个HtmlMacroComponent,它结合了标签和文本框 从zul文件开始:
<zk>
<label id="mcLabel"/><textbox id="mcTextbox"/>
</zk>
…现在您可以使用它,例如在zul文件顶部定义它。。。(根据需要调整包和.zul名称):
…所以你可以简单地使用它
<mytextbox id="name" value="Frank N. Furter" caption="Your name" mandatory="true"/>
以后你可以为它定义一个语言插件
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);
}
}
我的语言插件
xul/html
我的文本框
com.example.MyTextbox
/zk/textbox.zul
…这样,您就不需要再将定义放在每个使用它的.zul文件的顶部。有关这方面的更多信息,请参阅
当然,您也只能创建一个新标签等。但我发现为那些组合了各种组件的作业创建宏组件是一个好主意,因为这样,例如,您还可以自动添加验证等。很抱歉,回复太晚了,如果我同意您的建议,这意味着我必须在zk.xml中添加插件标记,我不需要像下面的例子那样将定义放在每个.zul文件的顶部:
,但是如果我喜欢添加上面的标记,我应该需要在我的zk.xml中添加标记插件吗?如果您将此标记添加到需要它的.zul文件中没有问题,您当然可以这样做。在这种情况下,不需要做进一步的操作,也不需要语言插件。我想这主要是一个品味问题。好吧,现在我将尝试将您的示例类MyTextbox
添加到我的项目中,并尝试在我的zul中像这样导入
,而不使用macroURI=“/zk/textbox.zul”
,因为我没有创建任何文件来定义插件,我可以像这样使用zul文件中的组件,它应该正常工作吗?我只需要创建一个java类,它是
MyTextbox`并在zul文件中调用它。如果不定义zul文件,宏组件将不会有任何内容。您必须在java类中创建内容,然后它可能会工作。很抱歉,回复太晚,如果我同意您的建议,这意味着我必须在我的zk.xml中添加addon标记,我不需要像下面的例子那样将定义放在每个.zul文件的顶部:
,但是如果我喜欢添加上面的标记,我应该需要在我的zk.xml中添加标记插件吗?如果您将此标记添加到需要它的.zul文件中没有问题,您当然可以这样做。在这种情况下,不需要做进一步的操作,也不需要语言插件。我想这主要是一个品味问题。好吧,现在我将尝试将您的示例类MyTextbox
添加到我的项目中,并尝试在我的zul中像这样导入
,而不使用macroURI=“/zk/textbox.zul”
,因为我没有创建任何文件来定义插件,我可以像这样使用zul文件中的组件,它应该正常工作吗?我只需要创建一个java类,它是
MyTextbox`并在zul文件中调用它。如果不定义zul文件,宏组件将不会有任何内容。您必须在java类中创建内容,然后它可能会工作。