1 18 package org.apache.beehive.netui.tags.html; 19 20 import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping; 21 import org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig; 22 import org.apache.beehive.netui.pageflow.internal.InternalConstants; 23 import org.apache.beehive.netui.pageflow.internal.InternalExpressionUtils; 24 import org.apache.beehive.netui.pageflow.internal.InternalUtils; 25 import org.apache.beehive.netui.pageflow.PageFlowUtils; 26 import org.apache.beehive.netui.tags.AbstractSimpleTag; 27 import org.apache.beehive.netui.util.Bundle; 28 import org.apache.beehive.netui.util.logging.Logger; 29 import org.apache.struts.Globals; 30 import org.apache.struts.action.ActionMapping; 31 import org.apache.struts.action.ActionMessage; 32 import org.apache.struts.action.ActionForm; 33 import org.apache.struts.config.ControllerConfig; 34 import org.apache.struts.config.ModuleConfig; 35 import org.apache.struts.taglib.html.Constants; 36 import org.apache.struts.util.MessageResources; 37 import org.apache.struts.util.RequestUtils; 38 39 import javax.servlet.ServletContext ; 40 import javax.servlet.http.HttpServletRequest ; 41 import javax.servlet.jsp.JspException ; 42 import javax.servlet.jsp.PageContext ; 43 import javax.servlet.jsp.el.ELException ; 44 import java.text.MessageFormat ; 45 import java.util.Locale ; 46 47 abstract public class ErrorBaseTag extends AbstractSimpleTag 48 { 49 private static final Logger LOGGER = Logger.getInstance(ErrorBaseTag.class); 50 51 54 protected static Locale defaultLocale = Locale.getDefault(); 55 56 61 protected String _bundleName = null; 62 63 67 protected String _locale = Globals.LOCALE_KEY; 68 69 81 public final void setBundleName(String bundleName) 82 throws JspException 83 { 84 _bundleName = setRequiredValueAttribute(bundleName, "bundleName"); 85 } 86 87 97 public final void setLocale(String locale) 98 { 99 _locale = setNonEmptyValueAttribute(locale); 100 } 101 102 103 109 protected String getErrorMessage(ActionMessage report, String bundleName) 110 throws JspException 111 { 112 String key = report.getKey(); 113 Object [] messageArgs = report.getValues(); 114 PageContext pageContext = getPageContext(); 115 116 String message = null; 117 HttpServletRequest request = (HttpServletRequest ) pageContext.getRequest(); 118 if (key.length() == 0) { 119 return ""; 120 } 121 else { 122 ModuleConfig curModuleConfig = RequestUtils.getModuleConfig(pageContext); 123 ServletContext servletContext = pageContext.getServletContext(); 124 125 String sharedFlowModulePath = InternalUtils.getForwardingModule(pageContext.getRequest()); 127 if (sharedFlowModulePath != null && 128 (curModuleConfig == null || !sharedFlowModulePath.equals(curModuleConfig.getPrefix()))) { 129 ModuleConfig sfModule = InternalUtils.getModuleConfig(sharedFlowModulePath, servletContext); 130 if (bundleName != null || !isMissingUserDefaultMessages(sfModule)) { 131 String msgAttr = (bundleName != null ? bundleName : Globals.MESSAGES_KEY) + sfModule.getPrefix(); 132 MessageResources resources = (MessageResources) servletContext.getAttribute(msgAttr); 133 message = getMessage(resources, key, messageArgs, pageContext); 134 } 135 } 136 137 boolean missingUserDefaultMessages = isMissingUserDefaultMessages(pageContext); 139 if (message == null && (bundleName != null || !missingUserDefaultMessages)) { 140 MessageResources resources = 141 InternalUtils.getMessageResources(bundleName != null ? bundleName : Globals.MESSAGES_KEY, 142 request, servletContext); 143 message = getMessage(resources, key, messageArgs, pageContext); 144 } 145 146 if (message == null && bundleName == null) { 148 MessageResources resources = 149 InternalUtils.getMessageResources("_defaultValidationMessages", request, servletContext); 150 message = getMessage(resources, key, messageArgs, pageContext); 151 } 152 153 if (message == null) { 159 if (bundleName == null && missingUserDefaultMessages) { 160 String s = Bundle.getString("Tags_ErrorsBundleMissing", key); 161 registerTagError(s, null); 162 return null; 163 } 164 else { 165 String s = Bundle.getString("Tags_ErrorsMessageMissing", key); 166 registerTagError(s, null); 167 return null; 168 } 169 } 170 } 171 172 return message; 173 } 174 175 private String getMessage(MessageResources resources, String key, Object [] messageArgs, PageContext pageContext) 176 { 177 if (resources != null) { 178 Locale userLocale = RequestUtils.retrieveUserLocale( pageContext, _locale ); 179 if ( messageArgs == null ) { 180 return resources.getMessage( userLocale, key ); 181 } 182 else { 183 return resources.getMessage( userLocale, key, messageArgs ); 184 } 185 } 186 187 return null; 188 } 189 190 194 protected static boolean isMissingUserDefaultMessages(PageContext pageContext) 195 { 196 return isMissingUserDefaultMessages(RequestUtils.getModuleConfig(pageContext)) 197 && pageContext.getRequest().getAttribute(Globals.MESSAGES_KEY) == null; 198 } 199 200 204 protected static boolean isMissingUserDefaultMessages(ModuleConfig mc) 205 { 206 if (mc != null) { 207 ControllerConfig cc = mc.getControllerConfig(); 208 209 if (cc instanceof PageFlowControllerConfig) { 210 return ((PageFlowControllerConfig) cc).isMissingDefaultMessages(); 211 } 212 } 213 214 return false; 215 } 216 } 217 | Popular Tags |