📄 tablerenderer.java
字号:
package com.esri.solutions.jitk.web.faces.renderkit.xml.ajax;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.esri.adf.web.faces.renderkit.xml.ajax.AJAXRenderer;
import com.esri.adf.web.util.XMLUtil;
import com.esri.solutions.jitk.web.data.results.RenderControlledResults;
import com.esri.solutions.jitk.web.data.results.TableModel;
import com.esri.solutions.jitk.web.faces.component.TableControl;
import com.esri.solutions.jitk.web.faces.renderkit.xml.TableRendererUtil;
import com.esri.solutions.jitk.web.tasks.IRenderAware;
public class TableRenderer implements AJAXRenderer {
private static Logger _logger = LogManager.getLogger(TableRenderer.class.getName());
@SuppressWarnings("unchecked")
public Class getControlClass() {
return TableControl.class;
}
public void renderAjaxResponse(FacesContext facesContext, UIComponent component, Object origState, boolean isEventSource, Element parentElement) {
TableControl control = (TableControl) component;
if(!control.isVisible()) return;
try {
// create state xml to compare with original state
Document doc = XMLUtil.newDocument();
Element root = XMLUtil.createElement(doc, "table", null, null);
XMLUtil.createElement(doc, "id", control.getId(), root);
XMLUtil.createElement(doc, "map-id", control.getMapId(), root);
XMLUtil.createElement(doc, "common-resources-registered", "true", root); //CHANGED FOR POSTBACK
XMLUtil.createElement(doc, "first-time", "false", root); //CHANGED FOR POSTBACK
TableRendererUtil.renderTableXml(control.getTableModel(), control.getId(), root);
String xml = XMLUtil.transform(doc, null);
TableModel tableModel = control.getTableModel();
if (isShouldRender(tableModel, xml, origState)) {
// return rendered html
Element tableElement = XMLUtil.createElement("table", null, parentElement);
XMLUtil.createElement("id", control.getId(), tableElement);
XMLUtil.createElement("map-id", control.getMapId(), tableElement);
XMLUtil.createElement("common-resources-registered", "true", tableElement); //CHANGED FOR POSTBACK
XMLUtil.createElement("first-time", "false", tableElement); //CHANGED FOR POSTBACK
XMLUtil.createElement("content", XMLUtil.transform(doc, control.getXslUrl()), tableElement);
}
_logger.debug(XMLUtil.transform(parentElement.getOwnerDocument(), null));
} catch (Exception ex) {
_logger.error("Unable to encode the table control.", ex);
}
}
public Object getOriginalState(UIComponent component) {
String state = "table";
TableControl control = (TableControl) component;
TableModel tableModel = control.getTableModel();
//If the table model is render controlled, then no need to return
//orignal state to compare with changed state to make the determination
//of whether rendering should take place or not. Render controlled
//table modles have a property exposed (isShouldRender()) that can
//be used to determine if rendering should take place. This reduces the
//need for intraspection and gives the application a performance boost
if(!(tableModel instanceof RenderControlledResults)) {
Document doc = XMLUtil.newDocument();
Element root = XMLUtil.createElement(doc, "table", null, null);
XMLUtil.createElement(doc, "id", control.getId(), root);
XMLUtil.createElement(doc, "map-id", control.getMapId(), root);
XMLUtil.createElement(doc, "common-resources-registered", "true", root); //CHANGED FOR POSTBACK
XMLUtil.createElement(doc, "first-time", "false", root); //CHANGED FOR POSTBACK
TableRendererUtil.renderTableXml(tableModel, control.getId(), root);
state = XMLUtil.transform(doc, null);
}
return state;
}
protected boolean isShouldRender(TableModel tableModel, String xml, Object origState) {
boolean isShouldRender = false;
if (tableModel instanceof RenderControlledResults) {
IRenderAware renderAware = (IRenderAware) tableModel;
isShouldRender = renderAware.isShouldRender();
if (isShouldRender) {
_logger.debug("Table Model requested results render, rendering will take place");
renderAware.setShouldRender(false);
}
} else {
isShouldRender = !xml.equals(origState);
}
return isShouldRender;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -