1 18 package org.apache.beehive.netui.tags.internal; 19 20 import org.apache.beehive.netui.pageflow.internal.InternalConstants; 21 import org.apache.beehive.netui.pageflow.internal.InternalExpressionUtils; 22 import org.apache.beehive.netui.pageflow.internal.ViewRenderer; 23 import org.apache.beehive.netui.tags.javascript.ScriptRequestState; 24 import org.apache.beehive.netui.tags.rendering.ResponseRenderAppender; 25 import org.apache.beehive.netui.tags.rendering.ScriptTag; 26 import org.apache.beehive.netui.tags.rendering.TagRenderingBase; 27 import org.apache.beehive.netui.util.logging.Logger; 28 29 import javax.servlet.ServletContext ; 30 import javax.servlet.ServletRequest ; 31 import javax.servlet.ServletResponse ; 32 import javax.servlet.http.HttpServletRequest ; 33 import javax.servlet.jsp.el.ELException ; 34 import java.io.IOException ; 35 import java.io.Serializable ; 36 import java.util.HashMap ; 37 import java.util.Iterator ; 38 import java.util.Map ; 39 40 44 public class ReturnActionViewRenderer 45 implements ViewRenderer, Serializable 46 { 47 private static final Logger _log = Logger.getInstance(ReturnActionViewRenderer.class); 48 49 private static char DELIM = ':'; 50 private static String ITEM_PARAM = InternalConstants.ATTR_PREFIX + "retrieveItem"; 51 private static String CALLBACK_PARAM = InternalConstants.ATTR_PREFIX + "returnActionCallback"; 52 53 private HashMap _retrieveMap; 54 private String _callbackFunc; 55 56 public static char getDelim() 57 { 58 return DELIM; 59 } 60 61 public static String getMapItemParamName() 62 { 63 return ITEM_PARAM; 64 } 65 66 public static String getCallbackParamName() 67 { 68 return CALLBACK_PARAM; 69 } 70 71 74 public void init(ServletRequest request) 75 { 76 String [] vals = request.getParameterValues(ITEM_PARAM); 77 78 if (vals != null) { 79 _retrieveMap = new HashMap (); 80 81 for (int i = 0; i < vals.length; i++) { 82 String val = vals[i]; 83 int delimPos = val.indexOf(DELIM); 84 if (delimPos != -1) { 85 String expressionToRetrieve = val.substring(0, delimPos); 86 String fieldID = val.substring(delimPos + 1); 87 _retrieveMap.put(fieldID, expressionToRetrieve); 88 } 89 } 90 } 91 92 _callbackFunc = request.getParameter(CALLBACK_PARAM); 93 } 94 95 public void renderView(ServletRequest request, ServletResponse response, ServletContext servletContext) 97 throws IOException 98 { 99 ResponseRenderAppender appender = new ResponseRenderAppender(response); 100 ScriptTag.State state = new ScriptTag.State(); 101 ScriptTag br = (ScriptTag) TagRenderingBase.Factory.getRendering(TagRenderingBase.SCRIPT_TAG, request); 102 state.suppressComments = false; 103 br.doStartTag(appender, state); 104 105 appender.append(ScriptRequestState.getString("popupReturn_begin", null)); 106 assert request instanceof HttpServletRequest : request.getClass().getName(); 107 HttpServletRequest httpRequest = (HttpServletRequest ) request; 108 109 if (_retrieveMap != null) { 110 for (Iterator i = _retrieveMap.entrySet().iterator(); i.hasNext();) { 111 Map.Entry entry = (Map.Entry ) i.next(); 112 String fieldID = (String ) entry.getKey(); 113 String expressionToRetrieve = "${" + (String ) entry.getValue() + '}'; 114 try { 115 String value = 116 InternalExpressionUtils.evaluateMessage(expressionToRetrieve, null, httpRequest, servletContext); 117 String item = 118 ScriptRequestState.getString("popupReturn_item", new Object []{fieldID, value}); 119 appender.append(item); 120 } 121 catch (ELException e) { 122 _log.error("Error evaluating expression " + expressionToRetrieve, e); 123 } 124 } 125 } 126 127 appender.append(ScriptRequestState.getString("popupReturn_end", new Object []{_callbackFunc})); 128 br.doEndTag(appender, false); 129 } 130 } 131 | Popular Tags |