如何在Wicket会话中配置反馈消息的颜色?

时间:2017-12-01 17:10:50

标签: wicket wicket-7

问题

您好, 我正在尝试配置Wickets反馈消息的颜色。我目前正在维护Wicket GUI(Wicket 7.6.1)。似乎Session.get().warn("Watch out!")打印了一个绿色警告框,注释了CSS类alert-success。我希望它将颜色改为黄色。

到目前为止我得到了什么:

我发现Session.get().getApplication().getResourceSettings()让我可以访问某些资源设置,包括属性工厂。但我不知道如何使用它。另外,我查找了与我的Session相关的标记文件但未找到任何标记文件。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您可以根据需要创建自定义反馈面板。

<强> CustomFeedBackPanel.html

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  mutate(Region = recode(Region, `Sales` = NA_character_)) %>%
  fill(Region) %>%
  filter_at(vars(-Region), any_vars(!is.na(.)))
dt2
# # A tibble: 3 x 4
#      Region Dummy value1 value2
#       <chr> <lgl>  <chr>  <chr>
# 1  Mangonui    NA      9      6
# 2   Kaitaia    NA     16      1
# 3 Whangaroa    NA      2      2

<强> CustomFeedBackPanel.java

<wicket:panel>
    <div wicket:id="feedbackul">
        <wicket:container wicket:id="messages">
            <p wicket:id="message"></p>
        </wicket:container>
    </div>

</wicket:panel>

您应该考虑public class CustomFeedbackPanel extends Panel implements IFeedback { private static final long serialVersionUID = 1L; private final MessageListView messageListView; WebMarkupContainer messagesContainer = new WebMarkupContainer("feedbackul") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(anyMessage()); } }; public CustomFeedbackPanel(final String id) { this(id, null); } public CustomFeedbackPanel(final String id, IFeedbackMessageFilter filter) { super(id); add(messagesContainer); messageListView = new MessageListView("messages"); messagesContainer.add(messageListView); if (filter != null) { setFilter(filter); } } public final boolean anyErrorMessage() { return anyMessage(FeedbackMessage.ERROR); } public final boolean anyMessage() { return anyMessage(FeedbackMessage.UNDEFINED); } public final boolean anyMessage(int level) { List<FeedbackMessage> msgs = getCurrentMessages(); for (FeedbackMessage msg : msgs) { if (msg.isLevel(level)) { return true; } } return false; } public final FeedbackMessagesModel getFeedbackMessagesModel() { return (FeedbackMessagesModel) messageListView.getDefaultModel(); } public final IFeedbackMessageFilter getFilter() { return getFeedbackMessagesModel().getFilter(); } public final CustomFeedbackPanel setFilter(IFeedbackMessageFilter filter) { getFeedbackMessagesModel().setFilter(filter); return this; } public final Comparator<FeedbackMessage> getSortingComparator() { return getFeedbackMessagesModel().getSortingComparator(); } public final CustomFeedbackPanel setSortingComparator(Comparator<FeedbackMessage> sortingComparator) { getFeedbackMessagesModel().setSortingComparator(sortingComparator); return this; } @Override public boolean isVersioned() { return false; } public final CustomFeedbackPanel setMaxMessages(int maxMessages) { messageListView.setViewSize(maxMessages); return this; } protected String getCSSClass(final FeedbackMessage message) { String css = "feedback"; if (message.getLevel() == FeedbackMessage.ERROR || message.getLevel() == FeedbackMessage.FATAL) { css = "feedback error"; } if (message.getLevel() == FeedbackMessage.SUCCESS) { css = "feedback success"; } if (message.getLevel() == FeedbackMessage.WARNING) { css = "feedback warn"; } return css; } protected final List<FeedbackMessage> getCurrentMessages() { final List<FeedbackMessage> messages = messageListView.getModelObject(); return Collections.unmodifiableList(messages); } protected FeedbackMessagesModel newFeedbackMessagesModel() { return new FeedbackMessagesModel(this); } protected Component newMessageDisplayComponent(String id, FeedbackMessage message) { Serializable serializable = message.getMessage(); Label label = new Label(id, (serializable == null) ? "" : serializable.toString()); label.setEscapeModelStrings(CustomFeedbackPanel.this.getEscapeModelStrings()); //label.add(new AttributeModifier("class",getCSSClass(message))); return label; } private final class MessageListView extends ListView<FeedbackMessage> { private static final long serialVersionUID = 1L; public MessageListView(final String id) { super(id); setDefaultModel(newFeedbackMessagesModel()); } @Override protected IModel<FeedbackMessage> getListItemModel( final IModel<? extends List<FeedbackMessage>> listViewModel, final int index) { return new AbstractReadOnlyModel<FeedbackMessage>() { private static final long serialVersionUID = 1L; @Override public FeedbackMessage getObject() { if (index >= listViewModel.getObject().size()) { return null; } else { return listViewModel.getObject().get(index); } } }; } @Override protected void populateItem(final ListItem<FeedbackMessage> listItem) { final FeedbackMessage message = listItem.getModelObject(); message.markRendered(); final Component label = newMessageDisplayComponent("message", message); final AttributeModifier levelModifier = AttributeModifier.replace("class", getCSSClass(message)); //label.add(levelModifier); listItem.add(levelModifier); listItem.add(label); messagesContainer.add(levelModifier); } } } 方法。您可以根据您的要求进行更改。我修改后仅供您参考。

getCssClass()

答案 1 :(得分:0)

反馈消息由FeedbackPanel类呈现。您的应用程序似乎使用FeedbackPanel的自定义实现,将消息呈现为Bootstrap Alerts。

默认情况下,Wicket将feedbackMessage<LogLevel>(例如feedbackMessageWarning)设置为所有邮件的CSS类,因此您可以根据需要设置它们的样式。

答案 2 :(得分:0)

不创建自定义FeedbackPanel和新HTML / Java文件的替代方法是使用enclosures

使用Twitter Bootstrap类:

<wicket:enclosure>
    <div class="alert alert-danger alert-dismissible">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
        <h4><i class="icon fa fa-ban"></i> Error on form validation!</h4>
        <div wicket:id="errorMessages"></div>
    </div>
</wicket:enclosure>

在页面构造函数中:

FeedbackCollector collector = new FeedbackCollector(this);
ExactErrorLevelFilter errorFilter = new ExactErrorLevelFilter(FeedbackMessage.ERROR);

add(new FeedbackPanel("errorMessages", errorFilter) {
    @Override public boolean isVisible() {
        return !collector.collect(errorFilter).isEmpty();
    }
});

由于Wicket 6反馈消息附加到组件,因此您可以使用FeedbackCollector和过滤器来获取和显示所需的消息。外壳的优点是:

  • 您不需要创建新文件;
  • 它与片段/面板类似;
  • 只有在需要的消息存在时才会呈现;

希望它有所帮助。