2016-08-30 1 views
0

Haii tout j'ai besoin d'aide, je veux personnaliser le composant Étiquette dans zk et i nedd pour ajouter une propriété qui est la propriété obligatoire lorsque je mets obligatoire = "vrai" le symbole astérisque apparaîtra et si i ensemble obligatoire = "false" le symbole de asterix disparaître, et je suis en train comme ceci:Comment personnaliser l'étiquette de composant dans ZK

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; 
    } 

mais la condition does'nt qui travaillent, comment le résoudre?

Répondre

1

Qu'est-ce que vous voulez sans doute que l'on appelle un HtmlMacroComponent, qui combine une étiquette et une zone de texte ...

Vous commencez avec un fichier adm:

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

... et créer un composant pour elle ...

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); 
    } 

} 

... et maintenant vous pouvez l'utiliser, par exemple en définissant sur le dessus de votre fichier adm ... (ajuster l'emballage et le nom .zul au besoin):

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

... de sorte que vous pouvez simplement l'utiliser ...

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

Plus tard, vous pouvez définir un addon de langue pour elle ...

ma langue-addon XUL/html MyTextBox com.example.MyTextbox /zk/textbox.zul

... de sorte que vous n'avez pas besoin de mettre la définition au-dessus de chaque fichier .zul où vous l'utilisez plus. Voir le documentation pour plus à ce sujet.

Bien sûr, vous ne pouviez également créer qu'une nouvelle étiquette, etc. mais je pensais que créer des MacroComponents pour les tâches qui combinent divers composants était une bonne idée, car vous pouvez par exemple ajouter automatiquement une validation,

+0

désolé pour la réponse tardive, si je coule votre suggérer cela signifie que je dois ajouter une balise addon dans mon zk.xml, et je ne ai pas besoin de mettre la définition au-dessus de chaque fichier .zul comme cet exemple: ' 'mais si je préfère ajouter la balise ci-dessus, devrais-je ajouter un tag addon dans mon zk? xml? –

+0

Si vous n'avez aucun problème pour ajouter cette balise aux fichiers .zul dans lesquels vous en avez besoin, vous pouvez bien sûr le faire. Dans ce cas, aucune autre action ne doit être effectuée, aucune extension de langue n'est nécessaire. Surtout une question de goût, je suppose. –

+0

okay maintenant je vais essayer d'ajouter votre exemple de classe 'MyTextbox' dans mon projet, et je vais essayer d'importer dans mon zul comme ceci' ' sans 'macroURI ="/zk/textbox.zul "' parce que je ne crée aucun fichier pour définir addon, et je peux utiliser le composant dans mon fichier zul comme ceci ' 'ça devrait marcher correctement? J'ai juste besoin de créer une classe java qui est 'MyTextbox' et l'appeler dans le fichier zul –