2010-07-14 54 views
10

我用靜態文本創建了一個鏈接。這工作正常,但現在我也想改變文本,當你點擊鏈接。如何更改Wicket中的鏈接文本?

我得到儘可能的:

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> 

化java:

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"))) 

     ); 

    } 

} 

我傾向於使用便門:容器,以便不污染與多餘的元素的HTML(檢票:容器將不會被在生產中呈現)

+0

好的解釋與所有必需的信息。 – 2016-08-10 06:30:39

8

你需要用自己的型號備份文本鏈接:

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

,並在Java:

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

更好,但如果你使用(化合物)PropertyModel並有getLinktext()函數返回文本,根據不同的狀態。

0

檢票不能改變你的鏈接的文本屬性,所以,添加一個新的html組件來做黑客攻擊。

我不同意這種理念,並且寧願把它留給情況的人:javascript。

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>元素中的附加標籤/跨度。

如果需要,您可以從java修改文本。如果你不這樣做,那就從JavaScript開始吧。

6

沒有變化在必要的HTML:

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

謝謝,這是一個很好的解決方案。 – 2017-09-27 17:23:49

0

在我們的檢票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; 
} 
} 

該組件滿足我們的需求。

0

使用您的鏈接的HTML標籤如下,並設置屬性文件中的文本的關鍵爲了使用它。

HTML:

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

物業:

label.LABLENAME  =YOUR OWN TEXT FOR LABLE! 

的Java:

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

輸出將是一個鏈接標籤與屬性文件中指定的文本。 只需將屬性中的相應文本更改爲您想要的任何文本即可。

+0

感謝Smittey讓它變得更好:) – 2016-09-20 12:43:53