2017-12-01 16 views
0

문제

안녕하십니까, Wickets 피드백 메시지의 색을 구성하려고합니다. 현재 Wicket GUI (Wicket 7.6.1)를 유지 관리 중입니다. Session.get().warn("Watch out!")은 녹색 경고 상자를 인쇄하고 CSS 클래스 alert-success으로 주석을 달았습니다. 나는 그것의 색깔을 노랑색으로 바꾸고 싶다. 내가 지금까지 가지고 무엇 Wicket 세션에서 피드백 메시지의 색을 어떻게 구성 할 수 있습니까?

는 :

나는 Session.get().getApplication().getResourceSettings()이 나에게 속성 공장 등 일부 리소스 설정에 액세스 할 수 있음을 발견했다. 그러나 나는 그것을 어떻게 사용하는지 모른다. 또한, 내 세션과 관련된 마크 업 파일을 찾았지만 찾을 수 없습니다.

도움이 될 것입니다.

답변

1

원하는 경우 사용자 지정 피드백 패널을 만들 수 있습니다.

CustomFeedBackPanel.html

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

</wicket:panel> 

CustomFeedBackPanel.java

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() 방법을 고려해야합니다. 당신은 귀하의 요구 사항에 따라 변경할 수 있습니다. 나는 단지 당신의 참조를 위해 수정했습니다.

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: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> 

:

트위터 부트 스트랩 클래스를 사용 :

protected String getCSSClass(final FeedbackMessage message) { 
      String css = "feedback"; 
      if (message.getLevel() == FeedbackMessage.ERROR 
        || message.getLevel() == FeedbackMessage.FATAL) { 
       css = "alert error"; 
      } 
      if (message.getLevel() == FeedbackMessage.SUCCESS) { 
       css = "alert success"; 
      } 
      if (message.getLevel() == FeedbackMessage.WARNING) { 
       css = "alert warn"; 
      } 

      return css; 
     } 
+0

답변 해 주셔서 감사합니다. 프로젝트에 'FeedbackPanel'이라는 이미 존재하는 커스텀 구현을 발견하고'getCssClass()'메소드를 수정했습니다. –

0

피드백 메시지는 FeedbackPanel 클래스에 의해 렌더링됩니다. 귀하의 응용 프로그램이 메시지를 부트 스트랩 경고로 렌더링하는 FeedbackPanel의 맞춤 구현을 사용하는 것 같습니다.

기본적으로 위킷은 모든 메시지의 CSS 클래스로 feedbackMessage<LogLevel> (예 : feedbackMessageWarning)을 설정하므로 사용자가 원하는대로 스타일을 지정할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 그것은 매우 유용했고 내가 이것을 읽은 직후 사용자 정의 된 FeedbackPanel 구현을 발견했습니다. –

0

사용자 정의 FeedbackPanel 새로운 HTML/자바 파일을 생성 할 수있는 대안은 enclosures을 사용하는 것입니다

Wicket 6 피드백 메시지가 구성 요소에 첨부되어 있으므로 사용할 수 있습니다. FeedbackCollector과 원하는 메시지를 가져와 표시하는 필터가 있습니다. 인클로저의 장점은 다음과 같습니다.

  • 새 파일을 만들 필요가 없습니다.
  • 조각/패널과 비슷하게 작동합니다.
  • 원하는 메시지가있는 경우에만 렌더링됩니다.

희망이 있습니다.