2016-08-30 3 views
0

私は助けが必要です、私はカスタムにしたいラベルコンポーネントはzkと私はプロパティを追加する必要があります必須のプロパティは、私は必須= "true"を設定するとアステリックスシンボルが表示されます私は必須=「false」にアスタリスク記号が消え設定し、私はこのようなしようとしています:どのように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; 
    } 

が、条件は、どのようにそれを解決するためにワーキングdoes'nt?

答えて

1

あなたはおそらく、あなたはZULファイルで始まり、ラベルとテキストボックスを組み合わせたHtmlMacroComponent、...

と呼ばれたい:

<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を作成することをお勧めします。このようにして、たとえば、

+0

申し訳ありませんが、もし私があなたの提案を流したら、私のzk.xmlにaddonタグを追加しなければならないということです。この例のようなすべての.zulファイルの上に定義を入れる必要はありません: '' <?component name = "signLabel" class = "com.common.shared.acction.adira.bitozen.zul.SignLabel"?> 'しかし、もし私が上記のタグを追加したいのであれば、私のzkにtag addonを追加する必要があります。 xml? –

+0

このタグを必要な.zulファイルに追加しても問題ない場合は、もちろんそうすることができます。この場合、それ以上のアクションは必要ありません。言語アドオンは必要ありません。ほとんどの場合、味の問題だと思います。 –

+0

大丈夫、今私は自分のプロジェクトにあなたの例のクラス 'MyTextbox'を追加しようとします、と私は'このように私のZULにインポートしようとする<?コンポーネント名=「MyTextBoxを」クラス=「com.example.MyTextbox」?> '私はaddonを定義するためのファイルを作成していないので、 'macroURI ="/zk/textbox.zul "なしで、' mytextbox id = "name" value = "Frank N. Furter "caption ="あなたの名前 "mandatory =" true "/> 'それは正しく機能するはずですか?私はちょうど 'MyTextbox'である1つのJavaクラスを作成し、それをzulファイルで呼び出す必要があります。 –

関連する問題