📄 resourcephaselistener.java
字号:
package com.esri.solutions.jitk.web.event;
import com.esri.adf.web.data.WebContext;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import com.esri.adf.web.data.WebMap;
import com.esri.adf.web.faces.component.MapControl;
import com.esri.adf.web.faces.renderkit.xml.ajax.AJAXResponseRenderer;
import com.esri.adf.web.faces.renderkit.xml.ajax.AJAXUtil;
import com.esri.adf.web.util.XMLUtil;
import com.esri.solutions.jitk.common.resources.TextResources;
import org.apache.log4j.Logger;
/**
* The MapLinksPhaseListener is used to intercept calls to the web adf, process
* the request and send an XML response for processing on the web browser as part
* of the AJAX request-response cycle.
*/
@SuppressWarnings("serial")
public class ResourcePhaseListener implements PhaseListener {
private static String SHARED_RESOURCE_NAME = "res.solutions_jitk_tasks";
private static String ERROR_MESSAGE = "resource.msg.error";
private ResourceBundle resourceBundle;
private Logger logger = Logger.getLogger(ResourcePhaseListener.class.getClass().getName());
//add required param name to identify if request is to be processed by this phase listener
private static final String REQUIRED_PARAM = "addResources";
//add form id variable name as passed in request param string
private static final String FORMID_PARAM = "formId";
//add map id variable name as passed in request param string
private static final String MAPID_PARAM = "mapId";
protected final ResourceBundle getResourceBundle() {
return resourceBundle;
}
protected final void setResourceBundle(ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle;
}
public PhaseId getPhaseId() {
return PhaseId.APPLY_REQUEST_VALUES;
}
public void beforePhase(PhaseEvent phaseEvent) {
//do nothing
}
@SuppressWarnings("unchecked")
public void afterPhase(PhaseEvent phaseEvent) {
FacesContext facesContext = phaseEvent.getFacesContext();
ExternalContext externalContext = facesContext.getExternalContext();
Map paramMap = externalContext.getRequestParameterMap();
//process only if request param hovertips=hovertips
if (! REQUIRED_PARAM.equals((String) paramMap.get(REQUIRED_PARAM)))
return;
try {
//get form element from view
String formId = (String) paramMap.get(FORMID_PARAM);
UIComponent form = facesContext.getViewRoot().findComponent(formId);
if(form == null) {
logger.error("Unable to find form (" + formId + ") for processing request.");
return;
}
//get control to perform operation
String mapId = (String) paramMap.get(MAPID_PARAM);
MapControl mapControl = (MapControl) form.findComponent(mapId);
if (mapControl == null) {
logger.error("Unable to find map (" + mapId + ") for processing request.");
return;
}
//create Vector of event sources
Vector eventSources = new Vector();
eventSources.add(mapId);
//create AJAXResponseRenderer
AJAXResponseRenderer responseRenderer = new AJAXResponseRenderer(facesContext, eventSources, form);
//get web map & web context
WebMap webMap = mapControl.getWebMap();
WebContext webContext = webMap.getWebContext();
//get extent of link
String resources = (String) paramMap.get("resources");
String zval = (String) paramMap.get("zoom");
String errUrl = "";
boolean zoom = true;
if (zval != null && zval.equalsIgnoreCase("false")) zoom = false;
if (resources != null && resources.length() > 0){
String[] resourceArray = resources.split(",");
for (int i = 0; i < resourceArray.length; i++){
errUrl += ResourceUtil.checkResource(resourceArray[i], webContext, zoom);
}
}
//get ajax xml response document
Document doc = responseRenderer.renderResponse(facesContext);
if (errUrl.length() > 0){
this.setResourceBundle(ResourceBundle.getBundle(SHARED_RESOURCE_NAME));
errUrl = TextResources.getResourceString(ERROR_MESSAGE) + "\n" + errUrl;
Element responseElement = XMLUtil.createElement(doc, "jitk-resource-response", null, doc.getDocumentElement());
XMLUtil.createElement("jitk-error-url", errUrl, responseElement);
}
//write xml response
AJAXUtil.writeResponse(facesContext, doc);
}
catch (Exception e) {
logger.error("Error in " + ResourcePhaseListener.class.getClass().getName(), e);
}
finally {
facesContext.responseComplete();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -