如何在 wicket 中单击三个 div 时显示不同的图像?
How to display different image on click of three div in wicket?
我是 apache wicket 的新手。我需要在 wicket 中显示 div 的默认图像。单击图像左侧我想将其替换为其他图像,单击右侧我想将其替换为其他图像。
为此,我想出了以下 html 和 java 代码:
<html>
<head>
<title>Wicket Hello World</title>
<style>
#linkDecisionContainer.left{
background-image: url("Desert.jpg");
}
#linkDecisionContainer.default{
background-image: url("Koala.jpg");
}
#linkDecisionContainer.right{
background-image: url("Penguins.jpg");
}
</style>
</head>
<body>
<div wicket:id ="linkDecisionContainer">
<a wicket:id="leftChoice"></a>
<a wicket:id="defaultChoice"></a>
<a wicket:id="rightChoice"></a>
</div>
</body>
</html>
我尝试将默认值 class 添加到 WebMarkupContainer 并在单击事件中相应地向左和向右添加 classes。
public class Hello extends WebPage {
private static final long serialVersionUID = 1L;
WebMarkupContainer ldc=new WebMarkupContainer("linkDecisionContainer");
private AjaxLink left;
private AjaxLink right;
public Hello() {
super();
ldc.add(new AttributeModifier("class", true, new Model<String>("default")));
left = new AjaxLink("leftChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
switchView("left");
target.addComponent(right);
}
};
right = new AjaxLink("rightChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
switchView("right");
target.addComponent(right);
}
};
add(left);
add(right);
}
private void switchView(String viewName) {
if (viewName.equals("left")) {
ldc.add(new AttributeModifier("class", true, new Model<String>("left")));
}
else if (viewName.equals("right")) {
ldc.add(new AttributeModifier("class", true, new Model<String>("right")));
}
}
}
谁能指导我实现它?
从您提供的代码来看,您似乎没有刷新 "linkDecisionContainer"。此外,您不应添加越来越多的 AttributeModifier
类,而应仅更改基础模型的值。 AttributeModifier
不会被添加另一个替换。因此,您依靠 Behaviors
的实施来确定哪个修改器最终获胜。
private IModel<String> ldcClassModel;
public Hello() {
super();
ldcClassModel = Model.of("default");
final WebMarkupContainer ldc = new WebMarkupContainer("linkDecisionContainer");
add(ldc);
ldc.setOutputMarkupId(true);
ldc.add(new AttributeModifier("class", ldcClassModel));
AjaxLink left = new AjaxLink("leftChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
ldcClassModel.setObject("left");
target.addComponent(ldc);
}
};
AjaxLink right = new AjaxLink("rightChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
ldcClassModel.setObject("right");
target.addComponent(ldc);
}
};
add(left);
add(right);
}
我是 apache wicket 的新手。我需要在 wicket 中显示 div 的默认图像。单击图像左侧我想将其替换为其他图像,单击右侧我想将其替换为其他图像。
为此,我想出了以下 html 和 java 代码:
<html>
<head>
<title>Wicket Hello World</title>
<style>
#linkDecisionContainer.left{
background-image: url("Desert.jpg");
}
#linkDecisionContainer.default{
background-image: url("Koala.jpg");
}
#linkDecisionContainer.right{
background-image: url("Penguins.jpg");
}
</style>
</head>
<body>
<div wicket:id ="linkDecisionContainer">
<a wicket:id="leftChoice"></a>
<a wicket:id="defaultChoice"></a>
<a wicket:id="rightChoice"></a>
</div>
</body>
</html>
我尝试将默认值 class 添加到 WebMarkupContainer 并在单击事件中相应地向左和向右添加 classes。
public class Hello extends WebPage {
private static final long serialVersionUID = 1L;
WebMarkupContainer ldc=new WebMarkupContainer("linkDecisionContainer");
private AjaxLink left;
private AjaxLink right;
public Hello() {
super();
ldc.add(new AttributeModifier("class", true, new Model<String>("default")));
left = new AjaxLink("leftChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
switchView("left");
target.addComponent(right);
}
};
right = new AjaxLink("rightChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
switchView("right");
target.addComponent(right);
}
};
add(left);
add(right);
}
private void switchView(String viewName) {
if (viewName.equals("left")) {
ldc.add(new AttributeModifier("class", true, new Model<String>("left")));
}
else if (viewName.equals("right")) {
ldc.add(new AttributeModifier("class", true, new Model<String>("right")));
}
}
}
谁能指导我实现它?
从您提供的代码来看,您似乎没有刷新 "linkDecisionContainer"。此外,您不应添加越来越多的 AttributeModifier
类,而应仅更改基础模型的值。 AttributeModifier
不会被添加另一个替换。因此,您依靠 Behaviors
的实施来确定哪个修改器最终获胜。
private IModel<String> ldcClassModel;
public Hello() {
super();
ldcClassModel = Model.of("default");
final WebMarkupContainer ldc = new WebMarkupContainer("linkDecisionContainer");
add(ldc);
ldc.setOutputMarkupId(true);
ldc.add(new AttributeModifier("class", ldcClassModel));
AjaxLink left = new AjaxLink("leftChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
ldcClassModel.setObject("left");
target.addComponent(ldc);
}
};
AjaxLink right = new AjaxLink("rightChoice") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
ldcClassModel.setObject("right");
target.addComponent(ldc);
}
};
add(left);
add(right);
}