2010-07-14 18 views
10

मैंने स्थिर पाठ के साथ एक लिंक बनाया है। यह ठीक काम करता है लेकिन अब जब आप लिंक पर क्लिक करते हैं तो मैं टेक्स्ट को भी बदलना चाहता हूं।मैं विकेट में लिंक-टेक्स्ट कैसे बदलूं?

मैं जहाँ तक इस रूप में मिला:

add(new Link("doAnything") { 
    @Override 
    public void onClick() { 
      // change the text! 
      // this.modelChanging(); 
      // this.detach(); 
    } 
}); 

मुझे आशा है कि आप मुझे कुछ आसान सलाह दे सकते हैं -

सादर मैं इस :) करने के लिए वास्तव में नया हूँ एलियास

उत्तर

18

HTML:

<html><head></head><body> 
<wicket:panel> 

    <a href="" wicket:id="link"> 
     <wicket:container wicket:id="label" /> 
    </a> 

</wicket:panel> 
</body></html> 

जावा: के लिए, कंटेनर ज़रूरत से ज़्यादा तत्वों के साथ एचटीएमएल (विकेट को दूषित नहीं करने के लिए:

public class MyPanel extends Panel{ 

    private static class Mybean{ 

     String labelText = "click me"; 

     public String getLabelText(){ 
      return this.labelText; 
     } 

     public void setLabelText(final String labelText){ 
      this.labelText = labelText; 
     } 

    } 

    public MyPanel(final String id){ 
     super(id); 
     final Mybean bean = new Mybean(); 
     this.add(new Link<Void>("link"){ 

      private static final long serialVersionUID = 1L; 

      @Override 
      public void onClick(){ 
       bean.setLabelText("Thanks for clicking"); 
      } 
     }.add(new Label("label", new PropertyModel<String>(bean, "labelText"))) 

     ); 

    } 

} 

मैं विकेट का उपयोग करते हैं कंटेनर नहीं होगा उत्पादन में प्रस्तुत)

+0

सभी आवश्यक जानकारी के साथ अच्छी व्याख्या। –

8

आप अपने मॉडल के साथ लिंक में पाठ को वापस करने की आवश्यकता है:

<a wicket:id="doAnything"> <span wicket:id="linktext"/> </a>

और जावा में:

add(new Link("doAnything").add(new Label("linktext", Model.of("i 'm the text")); 

बेहतर अभी तक अगर आप एक (मिश्रित) PropertyModel का उपयोग करें और एक getLinktext() है रिटर्न पाठ कार्य करते है, स्थिति के आधार पर।

0

विकेट आपके लिंक की टेक्स्ट विशेषता नहीं बदल सकता है, इसलिए, हैक करने के लिए एक नया HTML घटक जोड़ें।

मैं इस दर्शन से सहमत नहीं हूं, और इसे स्थिति के व्यक्ति को छोड़ना पसंद करता हूं: जावास्क्रिप्ट।

add(new AjaxLink("doAnything") { 
    @Override 
    public void onClick(final AjaxTarget t) { 
      // change the text! 
      t.appendJavaScript("document.getElementById('idofyourlink').text = 'newtext';"); 
      // this.modelChanging(); 
      // this.detach(); 
    } 
}); 

इस तरह आप अतिरिक्त लेबल/अपने <a> तत्व के अंदर अवधि की जरूरत नहीं है।

यदि आपको आवश्यकता हो तो आप जावा से अपना टेक्स्ट संशोधित कर सकते हैं। यदि आप नहीं करते हैं, तो बस इसे जावास्क्रिप्ट से करें।

6

एचटीएमएल आवश्यक में कोई बदलाव नहीं:

public abstract class AjaxLabeledLink extends AjaxLink { 

private IModel<String> text = new Model<>(); 

public AjaxLabeledLink(String string) { 
    super(string); 
    this.text = new Model<>(""); 
} 

public AjaxLabeledLink(String string, String linkText) { 
    super(string); 
    this.text = new Model<>(linkText); 
} 

public AjaxLabeledLink(String string, IModel<String> linkText) { 
    super(string); 
    this.text = linkText; 
} 

@Override 
public IModel<?> getBody() { 
    return text; 
} 

public IModel<String> getText() { 
    return text; 
} 

public void setText(IModel<String> text) { 
    this.text = text; 
} 
} 

इस घटक हमारे जरूरतों को पूरा:

Link link = new Link("doAnything") { 
    @Override 
    public void onClick() { 
      // change the text! 
      // this.modelChanging(); 
      // this.detach(); 
    } 
}); 
link.setBody(Model.of("visible link name")); 

add(link); 
+0

धन्यवाद, यह एक अच्छा समाधान है। –

0

हमारे विकेट 6 परियोजना में हम ऐसा ही कुछ का उपयोग करें।

0

एचटीएमएल टैग का उपयोग अपने लिंक के लिए अनुसरण करें और टेक्स्ट का उपयोग करने के लिए कुंजी के लिए प्रॉपर्टी फ़ाइल में सेट करें।

HTML:

<a wicket:id="doAnything"><wicket:message key="label.LABLENAME" /></a> 

संपत्ति:

label.LABLENAME  =YOUR OWN TEXT FOR LABLE! 

जावा:

add(new BookmarkablePageLink<YOURCLASS>(
      "doAnything", YOURCLASS.class))); 

आउटपुट पाठ संपत्ति फ़ाइल में निर्दिष्ट के साथ एक लिंक लेबल होगा। बस जो कुछ भी आप चाहते हैं उसे गुणों में संबंधित पाठ को बदलें।

+0

इसे बेहतर बनाने के लिए धन्यवाद Smittey :) –

संबंधित मुद्दे