AjaxLink 的 Wicket AttributeModifier

tef*_*ozi 3 java wicket

在 wicket 中,AttributeModifier 不会更改 AjaxLink 的属性“class”。它应该更改类属性并更改链接的外观。

public class TestPage extends WebPage {
    private AjaxLink link1;
    private AjaxLink link2;

    public TestPage() {
        super();

        link1 = new AjaxLink("link1") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                switchView("view1");
            }
        };

        link2 = new AjaxLink("link2") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                switchView("view2");
            }
        };

        link1.setOutputMarkupId(true);
        link2.setOutputMarkupId(true);

        link1.add(new AttributeModifier("class", true, new Model<String>("active")));
        link2.add(new AttributeModifier("class", true, new Model<String>("inactive")));

        add(link1);
        add(link2);
    }

    private void switchView(String viewName) {
        if (viewName.equals("view1")) {
            link1.add(new AttributeModifier("class", true, new Model<String>("active")));
            link2.add(new AttributeModifier("class", true, new Model<String>("inactive")));
        } else if (viewName.equals("view2")) {
            link1.add(new AttributeModifier("class", true, new Model<String>("inactive")));
            link2.add(new AttributeModifier("class", true, new Model<String>("active")));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

相应的html文件如下所示:

<html xmlns:wicket>
<body>
<wicket:extend>
 <div id="tabs">
 <ul>
  <li><a wicket:id="link1">View1</a></li>
  <li><a wicket:id="link2">View2</a></li>
 </ul>
 </div>
</wicket:extend>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

谢谢

Don*_*oby 5

您实际上并没有告诉 wicket 在 ajax 响应中执行任何操作。

一个可能的解决方法是添加以下行:

target.addComponent(link1);
target.addComponent(link2);
Run Code Online (Sandbox Code Playgroud)

(或调用执行此操作的函数)到您的两个 onClick 方法。