modelに設定するUtility
前述のClickServletについては
変更したらちゃんとweb.xmlのServletMapping変更すること。
Utility化するとこんな感じ?
使い方
public void onRender() { ClickPageUtil.addModelByAccessiblePageParameters(this); }
public class ClickPageUtil { public static void addModelByAccessiblePageParameters(Page page) { final Map model = page.getModel(); Method[] methods = page.getClass().getMethods(); for (int i = 0; i < methods.length; i++) { if (methods[i].getReturnType() != Void.TYPE && methods[i].getParameterTypes().length == 0) { String methodName = methods[i].getName(); try { String param = null; if (methodName.startsWith("get")) { param = createParamNameByMethodName(methodName, "get"); } else if (methodName.startsWith("is")) { param = createParamNameByMethodName(methodName, "is"); } Object object = methods[i].invoke(page, null); if(param != null) { model.put(param, object); } } catch (Exception e) { e.printStackTrace(); } } } } public static String createParamNameByMethodName(String methodName, String suffix) { String paramName = methodName.substring(suffix.length()); String first = paramName.substring(0, 1); paramName = paramName.replace(paramName.charAt(0), first.toLowerCase() .toCharArray()[0]); return paramName; }
引数はPage固定ではなく、パラメータ変えて、
Objectと、Mapを渡すようにして、
汎用的にしてもいいかもしれません。
その方がテストしやすいし。
もちろんcommons使えるならそれ利用する方が確実ですね