CustomSortAction.java

package com.dotj.web.struts; 
 
import java.util.Locale; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.struts.action.Action; 
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionForward; 
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.util.MessageResources; 
import com.dotj.io.DataSet; 
import com.dotj.grid.interfaces.IGridCommandEventArgs; 
import com.dotj.form.interfaces.IFormValidator; 
import com.dotj.form.FormValidatorTag; 
import com.dotj.test.MyGridListenerCustomSort; 
 
 
public final class CustomSortAction extends Action { 
    /** 
     * The <code>Log</code> instance for this application. 
     */ 
    protected static Log log = 
            LogFactory.getLog(CustomSortAction.class); 
 
 
    // --------------------------------------------------------- Public Methods
/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @throws Exception if the application business logic throws * an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); HttpSession session = request.getSession(); // Set a transactional control token to prevent double posting if (log.isTraceEnabled()) { log.trace(" Setting transactional control token"); } saveToken(request); String[] dataFields = {"Id", "LastName", "FirstName", "Gender", "Zip"}; String[] sortTypes = {"", "ASC", "DESC"}; int sortColumn = 3; String sortField = dataFields[sortColumn - 1]; int sortType = DataSet.SORT_ASCENDING; String sortOrder = sortTypes[sortType]; IFormValidator formValidator = FormValidatorTag.getDotJFormValidator(request); request.setAttribute("selectedColumn", new Integer(-1)); if (formValidator.IsPost()) { if (formValidator.getCommandEvent() instanceof IGridCommandEventArgs) { IGridCommandEventArgs cmdEvt = (IGridCommandEventArgs) formValidator.getCommandEvent(); sortColumn = cmdEvt.getSortColumnNumber(); request.setAttribute("selectedColumn", new Integer(sortColumn)); sortField = dataFields[sortColumn - 1]; sortType = cmdEvt.getSortType(); sortOrder = sortTypes[sortType]; } } String sql = "SELECT * FROM customer WHERE Id >= 1 ORDER BY " + sortField + " " + sortOrder; DataSet ds = JDBCUtil.executeQuery(servlet.getServletContext(), sql); if (ds != null) request.setAttribute("ds", ds); // Transfer this sort state to the listener so the grid will know about it. MyGridListenerCustomSort listener = new MyGridListenerCustomSort(); listener.setPost(formValidator.IsPost()); listener.setSortColumn(sortColumn); listener.setSortType(sortType); request.setAttribute("listener", listener); sql = "SELECT Code, Value FROM codes WHERE CodeSet = 'Gender'"; DataSet dsGender = JDBCUtil.executeQuery(servlet.getServletContext(), sql); if (dsGender != null) request.setAttribute("dsGender", dsGender); // Forward control to the edit user registration page if (log.isTraceEnabled()) { log.trace(" Forwarding to 'success' page"); } return (mapping.findForward("success")); } }