📄 strutsutils.java
字号:
package org.apache.velocity.tools.struts;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.Locale;
import java.util.Iterator;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.config.ModuleConfig;
import org.apache.struts.config.ForwardConfig;
import org.apache.struts.config.ActionConfig;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.RequestUtils;
import org.apache.struts.taglib.TagUtils;
import org.apache.struts.util.ModuleUtils;
/**
* <p>A utility class to expose the Struts shared
* resources. All methods are static.</p>
*
* <p>This class is provided for use by Velocity view tools
* that need access to Struts resources. By having all Struts-
* specific code in this utility class, maintenance is simplified
* and reuse fostered.</p>
*
* <p>It is the aim, that sooner or later the functionality in
* this class is integrated into Struts itself. See
* <a href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16814">Bug #16814</a>
* for more on that.</p>
*
* @author <a href="mailto:marinoj@centrum.is">Marino A. Jonsson</a>
* @author Nathan Bubna
* @author <a href="mailto:sidler@teamup.com">Gabe Sidler</a>
* based on code by <a href="mailto:ted@husted.org">Ted Husted</a>
*
* @version $Id: StrutsUtils.java 479724 2006-11-27 18:49:37Z nbubna $
*/
public class StrutsUtils
{
/****************** Struts ServletContext Resources ****************/
/**
* Returns the message resources for this application or <code>null</code>
* if not found.
*
* @param app the servlet context
* @since VelocityTools 1.1
*/
public static MessageResources getMessageResources(HttpServletRequest request,
ServletContext app)
{
/* Identify the current module */
ModuleConfig moduleConfig = ModuleUtils.getInstance().getModuleConfig(request, app);
return (MessageResources)app.getAttribute(Globals.MESSAGES_KEY +
moduleConfig.getPrefix());
}
/**
* Returns the message resources with the specified bundle name for this application
* or <code>null</code> if not found.
*
* @param app the servlet context
* @param bundle The bundle name to look for. If this is <code>null</code>, the
* default bundle name is used.
* @since VelocityTools 1.1
*/
public static MessageResources getMessageResources(HttpServletRequest request,
ServletContext app,
String bundle)
{
MessageResources resources = null;
/* Identify the current module */
ModuleConfig moduleConfig = ModuleUtils.getInstance().getModuleConfig(request, app);
if (bundle == null) {
bundle = Globals.MESSAGES_KEY;
}
// First check request scope
resources = (MessageResources) request.getAttribute(bundle + moduleConfig.getPrefix());
if (resources == null) {
resources = (MessageResources) app.getAttribute(bundle + moduleConfig.getPrefix());
}
return resources;
}
/**
* Select the module to which the specified request belongs, and
* add return the corresponding ModuleConfig.
*
* @param urlPath The requested URL
* @param app The ServletContext for this web application
* @return The ModuleConfig for the given URL path
* @since VelocityTools 1.1
*/
public static ModuleConfig selectModule(String urlPath,
ServletContext app)
{
/* Match against the list of sub-application prefixes */
String prefix = ModuleUtils.getInstance().getModuleName(urlPath, app);
/* Expose the resources for this sub-application */
ModuleConfig config = (ModuleConfig)
app.getAttribute(Globals.MODULE_KEY + prefix);
return config;
}
/********************** Struts Session Resources ******************/
/**
* Returns the <code>java.util.Locale</code> for the user. If a
* locale object is not found in the user's session, the system
* default locale is returned.
*
* @param request the servlet request
* @param session the HTTP session
*/
public static Locale getLocale(HttpServletRequest request,
HttpSession session)
{
Locale locale = null;
if (session != null)
{
locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);
}
if (locale == null)
{
locale = request.getLocale();
}
return locale;
}
/**
* Returns the transaction token stored in this session or
* <code>null</code> if not used.
*
* @param session the HTTP session
*/
public static String getToken(HttpSession session)
{
if (session == null)
{
return null;
}
return (String)session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
}
/*********************** Struts Request Resources ****************/
/**
* Returns the Struts errors for this request or <code>null</code>
* if none exist. Since VelocityTools 1.2, this will also check
* the session (if there is one) for errors if there are no errors
* in the request.
*
* @param request the servlet request
* @since VelocityTools 1.1
*/
public static ActionMessages getErrors(HttpServletRequest request)
{
ActionMessages errors = (ActionMessages)request.getAttribute(Globals.ERROR_KEY);
if (errors == null || errors.isEmpty())
{
// then check the session
HttpSession session = request.getSession(false);
if (session != null)
{
errors = (ActionMessages)session.getAttribute(Globals.ERROR_KEY);
}
}
return errors;
}
/**
* Returns the Struts messages for this request or <code>null</code>
* if none exist. Since VelocityTools 1.2, this will also check
* the session (if there is one) for messages if there are no messages
* in the request.
*
* @param request the servlet request
* @since VelocityTools 1.1
*/
public static ActionMessages getMessages(HttpServletRequest request)
{
ActionMessages messages = (ActionMessages)request.getAttribute(Globals.MESSAGE_KEY);
if (messages == null || messages.isEmpty())
{
// then check the session
HttpSession session = request.getSession(false);
if (session != null)
{
messages = (ActionMessages)session.getAttribute(Globals.MESSAGE_KEY);
}
}
return messages;
}
/**
* Returns the <code>ActionForm</code> bean associated with
* this request of <code>null</code> if none exists.
*
* @param request the servlet request
* @param session the HTTP session
*/
public static ActionForm getActionForm(HttpServletRequest request,
HttpSession session)
{
/* Is there a mapping associated with this request? */
ActionConfig mapping =
(ActionConfig)request.getAttribute(Globals.MAPPING_KEY);
if (mapping == null)
{
return null;
}
/* Is there a form bean associated with this mapping? */
String attribute = mapping.getAttribute();
if (attribute == null)
{
return null;
}
/* Look up the existing form bean */
if ("request".equals(mapping.getScope()))
{
return (ActionForm)request.getAttribute(attribute);
}
if (session != null)
{
return (ActionForm)session.getAttribute(attribute);
}
return null;
}
/**
* Returns the ActionForm name associated with
* this request of <code>null</code> if none exists.
*
* @param request the servlet request
* @param session the HTTP session
*/
public static String getActionFormName(HttpServletRequest request,
HttpSession session)
{
/* Is there a mapping associated with this request? */
ActionConfig mapping =
(ActionConfig)request.getAttribute(Globals.MAPPING_KEY);
if (mapping == null)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -