menuformcontroller.java

来自「Java的框架」· Java 代码 · 共 214 行

JAVA
214
字号
package mcaps.core.menu.webapp.controller;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import mcap.core.base.webapp.controller.BaseFormController;
import mcap.core.menu.model.Menu;
import mcap.core.menu.service.MenuManager;
import mcap.core.user.service.RoleManager;

import org.apache.commons.lang.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;


/**
 * Implementation of BaseFormController that interacts with the 
 * MenuManager to handle request to retrieve/persist menu info to 
 * data store.
 * 
 * @author Tan Beng Suang
 * @date 02-Sep-2005
 * @version 1.0.1.0
 */
public class MenuFormController extends BaseFormController {

	private MenuManager menuManager;
	private RoleManager roleManager;
	
	
	/**
	 * Returns the menuManager.
	 * @return MenuManager
	 */
	public MenuManager getMenuManager () {
		return menuManager;
	}

	
	/**
	 * Sets the menuManager.
	 * @param menuManager The menuManager to set.
	 */
	public void setMenuManager (MenuManager menuManager) {
		this.menuManager = menuManager;
	}
	
	
	/**
	 * Returns the roleManager.
	 * @return RoleManager
	 */
	public RoleManager getRoleManager () {
		return roleManager;
	}


	
	/**
	 * Sets the roleManager.
	 * @param roleManager The roleManager to set.
	 */
	public void setRoleManager (RoleManager roleManager) {
		this.roleManager = roleManager;
	}
	
	//----------------------------------------------------------------------
	// ----------------------------------------------------------------------

	
	


	/**
	 * First to be called.
	 */
	public ModelAndView processFormSubmission (HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		
		//	if the request is "Cancel"
		if (request.getParameter ("cancel") != null) {
			String parentId = request.getParameter ("parentId");
			if (parentId.equals("-1")) {
				return new ModelAndView (new RedirectView ("listMenus.action"));
			}
			else {
				return new ModelAndView (new RedirectView ("editMenu.action?menuId=" +
											parentId + "&method=Edit"));
			}
		}

		return super.processFormSubmission (request, response, command, errors);
	}

	
	/**
	 * Next to be called if processFormSubmission method called the
	 * super.processFormSubmission
	 */
	public ModelAndView onSubmit (HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		
		Menu menu = (Menu) command;
		
		Locale locale = request.getLocale ();
		
		if (request.getParameter ("delete") != null) {
			//request to delete role.
			
			this.getMenuManager().removeMenu(menu.getId());
			saveMessage (request, getText ("menu.deleted", menu.getName(),
										locale));

			String parentId = request.getParameter ("parentId");
			if (parentId.equals("-1")) {
				return new ModelAndView (new RedirectView ("listMenus.action"));
			}
			else {
				return new ModelAndView (new RedirectView ("editMenu.action?menuId=" +
											parentId + "&method=Edit"));
			}
		}
		else {
			
			String[] menuRoles = request.getParameterValues ("menuRoles");

			if (menuRoles != null) {
				// for some reason, Spring seems to hang on to the roles in
				// the User object, even though isSessionForm() == false
				menu.getRoles ().clear ();
				for (int i = 0; i < menuRoles.length; i++) {
					String roleName = menuRoles[i];
					menu.addRole (this.getRoleManager().getRole (roleName));
				}
			}
			else {
				menu.getRoles ().clear ();
			}
			
			if (StringUtils.equals (request.getParameter ("method"), "Add")) {
				this.getMenuManager().saveMenu (menu);
				String parentId = request.getParameter ("parentId");
				if (!parentId.equals("-1")) {
					Menu parent = this.getMenuManager().getMenu(parentId);
					parent.addMenuItem(menu);
					this.getMenuManager().saveMenu (parent);
				}
			}
			else {
				this.getMenuManager().saveMenu(menu);
			}
			
			if (StringUtils.equals (request.getParameter ("method"), "Edit")) {
				saveMessage (request, getText ("menu.saved", menu.getName (),
						locale));
			}
			else {
				saveMessage (request, getText ("menu.added", menu.getName (), locale));
			}
			
			return new ModelAndView (new RedirectView ("editMenu.action?menuId=" + menu.getId () + "&method=Edit"));
		}
	}

	
	/**
	 * calling in case of validation errors, to show the form view again.
	 * 
	 */
	protected ModelAndView showForm (HttpServletRequest request,
			HttpServletResponse response, BindException errors) throws Exception {

		// prevent ordinary users from calling a GET on editUser.html
		// unless a bind error exists.
		if ((request.getRequestURI ().indexOf ("editMenu") > -1)
				&& (!request.isUserInRole (mcap.core.user.util.NameConstants.ADMIN_ROLE)
						&& (errors.getErrorCount () == 0) && 
				(request.getRemoteUser () != null))) { 
			response.sendError (HttpServletResponse.SC_FORBIDDEN);

			return null;
		}

		return super.showForm (request, response, errors);
	}

	
	/**
	 * Retrieve a backing object for the current form from the given request.
	 */
	protected Object formBackingObject (HttpServletRequest request)
			throws Exception {
		
		Menu menu = null;
		
		if (StringUtils.equals (request.getParameter ("method"), "Add")) {
			menu = new Menu ();
			menu.setParentId (request.getParameter("parentId"));
		}
		else {	
			String id = request.getParameter ("menuId");
			
			menu = this.getMenuManager().getMenu(id);
		}
		
		return menu;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?