2016-08-30 5 views
0

안녕하세요 저는 도움이 필요합니다. zk에 사용자 정의 레이블 구성 요소를 지정하고 mandatory = "true"로 설정하면 필수 속성 인 속성을 추가 할 수 있습니다. 나는 필수 = "거짓"는 별표 기호가 사라 설정하고,이 같은 노력하고 있어요 :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 파일 위에 정의를 넣지 않아도됩니다.' 그러나 위의 태그를 추가하는 것을 선호한다면 내 zk에 태그 addon을 추가해야합니다. xml? –

+0

이 태그를 필요한 .zul 파일에 추가해도 문제가 없으면 물론 그렇게 할 수 있습니다. 이 경우 더 이상의 조치가 필요하지 않으며 언어 애드온이 필요하지 않습니다. 대부분 맛의 문제 일 것 같습니다. –

+0

좋아, 이제는 내 프로젝트에 예제 클래스'MyTextbox'를 추가하려고 시도 할 것이고,이 zul에서 가져 오기를 시도 할 것이다. 'macroURI = "/ zk/textbox.zul"이 없기 때문에 addon을 정의 할 파일이 없기 때문에이 zul 파일에서이 구성 요소를 사용할 수 있습니다. '제대로 작동해야합니까? 나는 단지 하나의 자바 클래스를 만들고 MyTextbox라고하고 zul 파일로 호출해야한다. –

관련 문제