Skip to content

Instantly share code, notes, and snippets.

@mrhanlon
Last active August 29, 2015 14:17
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save mrhanlon/f57311a9bdcdb75655ac to your computer and use it in GitHub Desktop.
package edu.utexas.tacc.helpers;
import com.github.jknack.handlebars.Helper;
import com.github.jknack.handlebars.Options;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.JavaConstants;
import javax.portlet.PortletConfig;
import javax.portlet.PortletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
/**
* Handlebars.java helper for Liferay SessionMessages and SessionErrors.
*
* Usage:
* <pre>
* // Java code
* HandlebarsViewResolver resolver = new HandlebarsViewResolver();
* resolver.registerHelper("messages", new SessionMessagesHelper());
*
* // In hbs template; portletRequest is a javax.portlet.PortletRequest object
* {{messages portletRequest}}
* </pre>
*
*
* @author mrhanlon
*/
public class SessionMessagesHelper implements Helper<PortletRequest> {
@Override
public CharSequence apply(PortletRequest request, Options options) throws IOException {
StringBuilder sb = new StringBuilder();
PortletConfig portletConfig = (PortletConfig) request.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG);
// errors
if (! SessionErrors.isEmpty(request)) {
List<String> messages = new ArrayList<>();
for (Iterator<String> it = SessionErrors.iterator(request); it.hasNext(); ) {
String key = it.next();
Object value = SessionErrors.get(request, key);
if (value == null) {
messages.add(LanguageUtil.get(portletConfig, Locale.getDefault(), key));
} else {
messages.add(LanguageUtil.get(portletConfig, Locale.getDefault(), value.toString()));
}
}
if (messages.size() > 0) {
sb.append("<div class=\"alert alert-danger\">");
if (messages.size() == 1) {
sb.append(messages.get(0));
} else {
sb.append("<ul>");
for (String m : messages) {
sb.append("<li>").append(m).append("</li>");
}
sb.append("</ul>");
}
sb.append("</div>");
}
SessionErrors.clear(request);
}
// success
if (! SessionMessages.isEmpty(request)) {
List<String> messages = new ArrayList<>();
for (Iterator<String> it = SessionMessages.iterator(request); it.hasNext(); ) {
String key = it.next();
Object value = SessionMessages.get(request, key);
if (value == null) {
messages.add(LanguageUtil.get(portletConfig, Locale.getDefault(), key));
} else {
messages.add(LanguageUtil.get(portletConfig, Locale.getDefault(), value.toString()));
}
}
if (messages.size() > 0) {
sb.append("<div class=\"alert alert-success\">");
if (messages.size() == 1) {
sb.append(messages.get(0));
} else {
sb.append("<ul>");
for (String m : messages) {
sb.append("<li>").append(m).append("</li>");
}
sb.append("</ul>");
}
sb.append("</div>");
}
SessionMessages.clear(request);
}
return sb.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment