如何在onClick()中禁用/更改wicket按钮链接的样式

Mic*_*rdt 4 java wicket

在Wicket应用程序中,我有一堆<button>元素,我正在攻击一个Link组件.现在在onClick()组件的方法中我想禁用或更改按钮的样式.我怎样才能做到这一点?通话setEnabled(false)无效.

jbr*_*ver 9

重复使用onClick()正在内存中的同一对象上运行.如果您没有使用Ajax,您仍然可以在Link的匿名子类中维护某些状态.然后,您可以使用onBeforeRender()和onComponentTag()来更改每次显示的方式.

Link<Void> link = new Link<Void>("myLink") {

    private String customCSS = null;
    private boolean customEnabled = true;

    public void onClick() {
        if (/* test to determine disabled */) {
            customCSS = "disabled";
            customEnabled = false;
        } else {
            customCSS = null;
            customEnabled = true;
        }
    }

    @Override
    protected void onComponentTag(ComponentTag tag) {
        super.onComponentTag(tag);
        if (customCSS != null)
            tag.put("class", customCSS);
    }

    @Override
    public boolean isEnabled() {
        return super.isEnabled() && customEnabled;
    }
};
Run Code Online (Sandbox Code Playgroud)

AttributeModifiers(或其他行为)不适用于这种情况,因为如果您在onClick()方法中添加它们,它们将在每次单击的同一链接上开始堆叠 - 因为它们是作为链接状态的一部分进行维护的.

您的链接可以跟踪所有状态,允许您的onClick()方法通过重复点击启用/禁用/更改/等.

您还可以覆盖onBeforeRender(),isVisible()以及每次在页面上显示链接时运行的其他方法.无论您单击按钮多少次,构造函数,onConfigure()和其他只运行一次.

  • 谢谢 - 重写isEnabled()就可以了 (2认同)