package com.hundsun.jresplus.web.view;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindingResult;
/**
* 基于org.springframework.web.servlet.view.xml.MarshallingView封装的view,支持模型转换
* @author xjj
*
*/
public class MarshallingView extends
org.springframework.web.servlet.view.xml.MarshallingView {
private ModelConverter modelConverter;
protected void renderMergedOutputModel(Map model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
super.renderMergedOutputModel(filterModel(model), request, response);
}
protected Object locateToBeMarshalled(Map model) throws ServletException {
Object obj = super.locateToBeMarshalled(model);
if (modelConverter != null) {
return modelConverter.convert(obj);
}
return obj;
}
private Map filterModel(Map model) {
Map result = new HashMap(model.size());
Set<String> renderedAttributes = model.keySet();
Set<Entry> entrySet = model.entrySet();
for (Entry entry : entrySet) {
if (!(entry.getValue() instanceof BindingResult)
&& renderedAttributes.contains(entry.getKey())) {
result.put(entry.getKey(), entry.getValue());
}
}
return result;
}
public ModelConverter getModelConverter() {
return modelConverter;
}
public void setModelConverter(ModelConverter modelConverter) {
this.modelConverter = modelConverter;
}
}