我创建了一个包含静态文本的链接。这很好但现在我也想在你点击链接时更改文字。
我得到了这个:
add(new Link("doAnything") {
@Override
public void onClick() {
// change the text!
// this.modelChanging();
// this.detach();
}
});
我希望你能给我一些简单的建议 - 我对此很陌生:)
祝你好运 利亚
答案 0 :(得分: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")))
);
}
}
我倾向于使用wicket:容器以便不使用多余的元素污染HTML(wicket:容器不会在生产中呈现)
答案 1 :(得分: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()函数,则返回文本,具体取决于状态。
答案 2 :(得分:7)
不需要更改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);
答案 3 :(得分:0)
Wicket无法更改链接的text属性,因此,添加一个新的html组件来执行hack。
我不同意这种理念,而是倾向于将其留给情况的人: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那里开始吧。
答案 4 :(得分:0)
在我们的Wicket 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;
}
}
该组件满足我们的需求。
答案 5 :(得分:0)
使用HTML标记作为您的链接,并在属性文件中设置密钥以便使用它。
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)));
输出将是一个链接标签,其中包含属性文件中指定的文本。 只需将属性中的相应文本更改为您想要的任何文本。