gpt4 book ai didi

java - 如何从 Wicket 组件中删除 CSS 类?

转载 作者:太空狗 更新时间:2023-10-29 22:54:21 24 4
gpt4 key购买 nike

使用 AttributeAppender 动态添加 CSS 类到 Java 代码中的组件非常简单。 :

component.add(new AttributeAppender("class", true, new Model<String>("foo"), " "));

或者,如果您已将上述内容提取到适当的实用程序方法或类中,只需像这样:

component.add(WicketUtils.cssClassAppender("foo"));

但是我怎样才能删除 CSS 类呢?

您可以通过完全清除类属性轻松删除所有 CSS 类:

component.add(new SimpleAttributeModifier("class", ""));

...但是如果组件有其他您希望删除的 CSS 类,那是 Not Acceptable 。

Wicket 1.4(但也可以随意发布针对更高版本的建议)。

最佳答案

这是我想出的一种方法:

public class CssClassRemover extends AttributeModifier {
public CssClassRemover(String cssClass) {
super("class", false, new Model<String>(cssClass));
}

@Override
protected String newValue(String currentValue, String valueToRemove) {
// NB: naive approach; breaks with e.g. "foo foo-bar" & "foo"
return currentValue.replaceAll(valueToRemove, "");
}
}

使用上述助手的代码将是:

component.add(new CssClassRemover("foo"))

(当然,您也可以根据需要创建匿名的 AttributeModifier 子类,但是将逻辑放在单独的实用程序类或方法中会清理很多。)

编辑:newValue() 的改进版本可以更好地处理极端情况(参见 biziclop 的评论)。注意:使用 Guava . (欢迎您发布更简单的(正则表达式?)版本。)

@Override
protected String newValue(String currentValue, String valueToRemove) {
if (currentValue == null) return "";

Set<String> classes = Sets.newHashSet(Splitter.on(" ").split(currentValue));
classes.remove(valueToRemove);
return Joiner.on(" ").join(classes);
}

关于java - 如何从 Wicket 组件中删除 CSS 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10135791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com