Skip to content

Instantly share code, notes, and snippets.

@tomrlh
Created January 29, 2018 04:23
Show Gist options
  • Save tomrlh/7351ada681c3ad3059c694ed888739c5 to your computer and use it in GitHub Desktop.
Save tomrlh/7351ada681c3ad3059c694ed888739c5 to your computer and use it in GitHub Desktop.
Displaying FeedbackMessages dynamically in Wicket
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Template</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css"/>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic"/>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css"/>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/skins/_all-skins.min.css"/>
</head>
<body class="hold-transition skin-green layout-top-nav">
<div class="content-wrapper">
<section class="content-header">
<h1>FeedbackMessage Handler <small>Example with Apache Wicket</small></h1>
</section>
<section class="content">
<div class="row">
<div class="col-md-12">
<div class="box box-success">
<div class="box-body">
<wicket:enclosure>
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<h4><i class="icon fa fa-check"></i> Bingo, form submitted!</h4>
<div wicket:id="successMessages"></div>
</div>
</wicket:enclosure>
<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>
<form wicket:id="SimpleForm" class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">Your name</label>
<div class="col-sm-10">
<input wicket:id="name" type="text" class="form-control">
</div>
</div>
<div class="box-footer col-md-12">
<button type="submit" class="btn bg-gray pull-right"><i class="fa fa-check"></i> Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
</div>
<script src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
import org.apache.wicket.feedback.ErrorLevelFeedbackMessageFilter;
import org.apache.wicket.feedback.FeedbackCollector;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.IFeedbackMessageFilter;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.Model;
/**
*
* @author tomurlh
*/
public class FormMessagesHandlerExample extends WebPage {
public FormMessagesHandlerExample() {
FeedbackCollector collector = new FeedbackCollector(this);
ExactErrorLevelFilter successFilter = new ExactErrorLevelFilter(FeedbackMessage.SUCCESS);
ExactErrorLevelFilter errorFilter = new ExactErrorLevelFilter(FeedbackMessage.ERROR);
add(new SimpleForm("SimpleForm"));
add(new FeedbackPanel("successMessages", successFilter) {
@Override public boolean isVisible() {
return !collector.collect(successFilter).isEmpty();
}
});
add(new FeedbackPanel("errorMessages", errorFilter) {
@Override public boolean isVisible() {
return !collector.collect(errorFilter).isEmpty();
}
});
}
class SimpleForm extends Form {
public SimpleForm(String id) {
super(id);
add(new TextField("name", Model.of("")).setRequired(true));
}
@Override
protected void onSubmit() {
success("Your name is: " + getPage().get("SimpleForm:name").getDefaultModelObject());
}
}
class ExactErrorLevelFilter implements IFeedbackMessageFilter {
private int errorLevel;
public ExactErrorLevelFilter(int errorLevel) {
this.errorLevel = errorLevel;
}
public boolean accept(FeedbackMessage message) {
return message.getLevel() == errorLevel;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment