slim3でjspのスクリプトレットでもHot Reloadingする方法 - あおうさ@日記の続き。
CallerUtil.getCallerClassLoader()でJSPのクラスローダーを取得する。
ViewHelper.class
@SuppressWarnings("unchecked") public static <T> T get(String attributeKey) { T result = (T)RequestLocator.get().getAttribute(attributeKey); if (result != null && isHotReloading()){ byte[] bytes = ByteUtil.toByteArray(result); result = (T)ByteUtil.toObject(bytes, CallerUtil.getCallerClassLoader()); } return result; } private static boolean isHotReloading(){ return (Thread.currentThread().getContextClassLoader() instanceof HotReloadingClassLoader); }
jsp
<%@ page import="static study.ViewHelper.*" %> <% List<Blog> blogList = get("blogList"); Blog blog = blogList.get(0); %>