📄 actioncomponentservlet.java
字号:
ActionErrors errors = formInstance.validate(mapping, request);
if ((errors == null) || errors.empty()) { //
if (debug >= 1)
log(" No errors detected, accepting input");
return (true);
}
//does our form have a multipart request?
if (formInstance.getMultipartRequestHandler() != null) {
//rollback the request
if (debug > 1) {
log(" Rolling back the multipart request");
}
formInstance.getMultipartRequestHandler().rollback();
}
// Has an input form been specified for this mapping?
String uri = mapping.getInput();
if (uri == null) {
if (debug >= 1)
log(" No input form, but validation returned errors");
response.sendError(
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
internal.getMessage("noInput", mapping.getPath()));
return (false);
}
// Save our error messages and return to the input form if possible
if (debug >= 1)
log(" Validation error(s), redirecting to: " + uri);
request.setAttribute(Globals.ERROR_KEY, errors);
doForward(uri, request, response);
return (false);
}
/**
* Overload struts1.0 counterpart in order to catch forward calls.
* This is an exact copy, except the call to RequestDispatcher.forward()
* replaced by doForward().
* This method is only used with Struts1.0.x
*
* Process a forward requested by this mapping, if any. Return
* <code>true</code> if processing of this request should continue (i.e.
* be processed by an Action class), or <code>false</code> if we have
* already handled this request.
*
* @param mapping The ActionMapping we are processing
* @param request The request we are processing
* @param response The response we are processing
*
* @exception IOException if the included resource throws an exception
* @exception ServletException if the included resource throws an
* exception
*/
protected boolean processForward(ActionMapping mapping,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
// Are we going to process this request?
String forward = mapping.getForward();
if (forward == null)
return (true);
// process forward and give Tiles a chance to catch definition names
doForward(forward, request, response);
return (false);
}
/**
* Overload struts1.0 counterpart in order to catch include calls.
* This is an exact copy, except the call to RequestDispatcher.include()
* replaced by doInclude().
* This method is only used with Struts1.0.x
*
* Process an include requested by this mapping, if any. Return
* <code>true</code> if processing of this request should continue (i.e.
* be processed by an Action class), or <code>false</code> if we have
* already handled this request.
*
* @param mapping The ActionMapping we are processing
* @param request The request we are processing
* @param response The response we are processing
*
* @exception IOException if the included resource throws an exception
* @exception ServletException if the included resource throws an
* exception
*/
protected boolean processInclude(ActionMapping mapping,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
// Are we going to process this request?
String include = mapping.getInclude();
if (include == null)
return (true);
// process forward and give Tiles a chance to catch definition names
doForward(include, request, response);
return (false);
}
/**
* Do forward, and eventually catch uri containing Tiles definition.
* Method left for compatibility reasons.
* @param uri Uri or Definition name to forward
* @param request Current page request
* @param response Current page response
* @deprecated use doForward instead
*/
protected void processForward( String uri,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doForward(uri, request, response);
}
/**
* Do a forward, and eventually catch uri containing Tiles definition.
* If uri is a valid uri, do a forward to it.
* If uri is a valid definition name, Tiles context is created from definition,
* and definition path is used as uri.
* @param uri Uri or Definition name to forward
* @param request Current page request
* @param response Current page response
*/
protected void doForward(String uri, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
// Do we do a forward (original behavior) or an include ?
boolean doInclude = false;
// Controller associated to a definition, if any
Controller controller = null;
ComponentContext tileContext = null;
try
{
// Get current tile context if any.
// If context exist, we will do an include
tileContext = ComponentContext.getContext( request );
doInclude = (tileContext!=null );
ComponentDefinition definition;
// Process tiles definition names only if a definition factory exist,
// and definition found.
if( definitionsFactory != null )
{ // Get definition of tiles/component corresponding to uri.
definition = definitionsFactory.getDefinition(uri, request, getServletContext());
if( definition != null )
{ // We have a definition.
// We use it to complete missing attribute in context.
// We also get uri, controller.
uri = definition.getPath();
controller = definition.getOrCreateController();
if( tileContext == null )
{
tileContext = new ComponentContext( definition.getAttributes() );
ComponentContext.setContext( tileContext, request);
}
else
tileContext.addMissing( definition.getAttributes() );
} // end if
} // end if
// Process definition set in Action, if any.
definition = DefinitionsUtil.getActionDefinition(request);
if( definition != null )
{ // We have a definition.
// We use it to complete missing attribute in context.
// We also overload uri and controller if set in definition.
if(definition.getPath()!=null)
uri = definition.getPath();
if(definition.getOrCreateController()!=null)
controller = definition.getOrCreateController();
if( tileContext == null )
{
tileContext = new ComponentContext( definition.getAttributes() );
ComponentContext.setContext( tileContext, request);
}
else
tileContext.addMissing( definition.getAttributes() );
} // end if
}
catch( java.lang.InstantiationException ex )
{
throw new ServletException( "Can't create associated controller", ex );
}
catch( DefinitionsFactoryException ex )
{
throw new ServletException( ex );
}
// Execute controller associated to definition, if any.
if(controller !=null)
{
controller.perform( tileContext, request, response, getServletContext());
} // end if
// Do dispatching : search dispatcher, then dispatch
RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);
if (rd == null)
{ // error
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
internal.getMessage("requestDispatcher", uri));
return;
} // end if
// Unwrap the multipart request, if there is one.
if (request instanceof MultipartRequestWrapper) {
request = ((MultipartRequestWrapper) request).getRequest();
}
// If request comes from a previous Tile, do an include.
// This allows to insert an action in a Tile.
if( doInclude )
rd.include(request, response);
else
rd.forward(request, response); // original behavior
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -