|
The Struts new CoR(Chain of Responsibility) structure gives us more flexibility to add our commands in between the request processing and also with less effort. All the user needs is to extend org.apache.struts.chain.commands.ActionCommandBase class and override the execute() method in it.
The below example will demonstrate how do we insert our own command objects in the existing Struts CoR without changing the actual flow and the ComposeableRequestProcessor will call the file implicitly. For any type of addition and deletion of the commands only the chain-config.xml file is changed and the Struts automatically take care of the flow.
(1) Struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <!-- ================================================ Form Bean Definitions --> <form-beans> <form-bean name="inputForm" type="com.visualbuilder.InputForm" />
</form-beans> <!-- ========================================= Global Exception Definitions --> <global-exceptions></global-exceptions> <!-- =========================================== Global Forward Definitions --> <global-forwards></global-forwards> <!-- =========================================== Action Mapping Definitions --> <action-mappings> <action path="/submit" type="com.visualbuilder.SubmitAction" name="inputForm" scope="request" validate="false" input="/index.jsp"/> </action-mappings>
<!-- =========================================== Controller Mapping Definition --> <controller contentType="text/html;charset=UTF-8" locale="true" debug="1" nocache="true" processorClass="org.apache.struts.chain.ComposableRequestProcessor" />
<!-- ======================================== Message Resources Definitions --> <message-resources parameter="MessageResources" />
</struts-config>
(2) CustomCommand.java File
Note:- The following file is created for the command object. If it returns true it means some exception occurred so it wont call the next Command in the chain and returns to the input jsp file.
package com.visualbuilder.command;
import org.apache.struts.chain.commands.ActionCommandBase; import org.apache.struts.chain.contexts.ActionContext;
public class CustomCommand extends ActionCommandBase {
@Override public boolean execute(ActionContext ctx) throws Exception {
boolean result=true; System.out.println("Called the logic for the Custom Command"); return false; }
}
(3) Chain-config.xml file
Note :- The following command will be added in the chain-config.xml file anywhere in the process-action chain.
<!-- Execute the Custom Command for this request --> <command className="com.visualbuilder.command.CustomCommand"/>
|