[S2Struts] HttpServletRequestから値が取得できない
の対応だけど、下みたいにしようかなーっと思ってます。
multipartのときは2度populateすることにあるけど、他に良い方法が思いつかなくて。
public class PopulateProcessorImpl implements PopulateProcessor { public void processPopulate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping, ExternalRequestProcessor requestProcessor) throws ServletException { if (request instanceof MultipartRequestWrapper) { requestProcessor.processPopulate(request, response, form, mapping); Map parameters = getCheckBoxParameters(request); if (!parameters.isEmpty()) { S2ServletRequestWrapper s2request = new S2ServletRequestWrapper( ((MultipartRequestWrapper) request).getRequest()); addParameter(s2request, parameters); request = new MultipartRequestWrapper(s2request); requestProcessor.processPopulate(request, response, form, mapping); } } else { Map parameters = getCheckBoxParameters(request); if (!parameters.isEmpty()) { S2ServletRequestWrapper s2request = new S2ServletRequestWrapper(request); addParameter(s2request, parameters); request = s2request; } requestProcessor.processPopulate(request, response, form, mapping); } } private Map getCheckBoxParameters(HttpServletRequest request) { Map result = new HashMap(); for (Iterator i = request.getParameterMap().keySet().iterator(); i.hasNext();) { String paramName = (String) i.next(); if (paramName.startsWith(Constants.CHECKBOX_NAME)) { String checkboxParamName = paramName.substring(Constants.CHECKBOX_NAME.length()); String checkboxValue = request.getParameter(checkboxParamName); if (checkboxValue == null) { result.put(checkboxParamName, Boolean.FALSE.toString()); } } } return result; } private void addParameter(S2ServletRequestWrapper request, Map parameters) { for (Iterator i = parameters.entrySet().iterator(); i.hasNext();) { Map.Entry parameter = (Map.Entry) i.next(); request.addParameterValue((String) parameter.getKey(), (String) parameter.getValue()); } } }