在Wicket应用程序中,我有一堆<button>元素,我正在攻击一个Link组件.现在在onClick()组件的方法中我想禁用或更改按钮的样式.我怎样才能做到这一点?通话setEnabled(false)无效.
重复使用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()和其他只运行一次.