英文:
Apache wicket 7: how to add a behavior to a label inside enclosure?
问题
<label class="col-sm-4 control-label">Vorlage</label>
英文:
I have a legacy block of code as shown:
<wicket:enclosure >
<div class="form-group">
<label class="col-sm-4 control-label">Vorlage</label>
<div class="col-sm-8 form-control-static" wicket:id="referencedAeCode">XYZ</div>
</div>
</wicket:enclosure>
and the corresponding java code is:
add(newReferenceCodeLabel("referencedAeCode"));
where the impl. of newReferenceCodeLabel() is:
private Label newReferenceCodeLabel(final String id) {
return new Label(id, new AbstractReadOnlyModel<String>() {
private static final long serialVersionUID = 5340631294817017953L;
@Override
public String getObject() {
final Element element = getElement();
String code = element.getCode ();
if (element instanceof Thing
&& element.getACode().equals(code)) {
code = null;
}
return code;
}
});
}
Now, I want to add a wicket behavior (using the add() method) to the Label itself inside the enclosure, what currently happening is the behavior being added to the whole enclosure.
<label class="col-sm-4 control-label">Vorlage</label>
答案1
得分: 0
你没有展示添加行为的代码,所以不清楚为什么会表现出这种行为。
但我建议您将基于标记的封装(<wicket:enclosure>
)替换为显式的基于Java的对应项 - EnclosureContainer
:
新的标记:
<div wicket:id="referencedAeCodeEnclosure" class="form-group">
<label class="col-sm-4 control-label">Vorlage</label>
<div class="col-sm-8 form-control-static" wicket:id="referencedAeCode">XYZ</div>
</div>
新的Java代码:
private Label newReferenceCodeLabel(final String id) {
Label label = new Label(id, new AbstractReadOnlyModel<String>() {
private static final long serialVersionUID = 5340631294817017953L;
@Override
public String getObject() {
final Element element = getElement();
String code = element.getCode ();
if (element instanceof Thing
&& element.getACode().equals(code)) {
code = null;
}
return code;
}
});
label.add(someBehavior);
return label;
}
...
Label label = newReferenceCodeLabel("referencedAeCode");
EnclosureContainer container = new EnclosureContainer("referencedAeCodeEnclosure", label);
container.add(label);
add(container);
}
英文:
You didn't show us the code that adds the Behavior so it is not clear why it behaves this way.
But I'd recommend you to replace the markup-based enclosure ( <wicket:enclosure>
) with the explicit Java-based counterpart - EnclosureContainer
:
New markup:
<div wicket:id="referencedAeCodeEnclosure" class="form-group">
<label class="col-sm-4 control-label">Vorlage</label>
<div class="col-sm-8 form-control-static" wicket:id="referencedAeCode">XYZ</div>
</div>
New Java code:
private Label newReferenceCodeLabel(final String id) {
Label label = new Label(id, new AbstractReadOnlyModel<String>() {
private static final long serialVersionUID = 5340631294817017953L;
@Override
public String getObject() {
final Element element = getElement();
String code = element.getCode ();
if (element instanceof Thing
&& element.getACode().equals(code)) {
code = null;
}
return code;
}
});
label.add(someBehavior);
return label;
}
...
Label label = newReferenceCodeLabel("referencedAeCode");
EnclosureContainer container = new EnclosureContainer("referencedAeCodeEnclosure", label);
container.add(label);
add(container);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论