roleformcontroller.java

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

JAVA
188
字号
package mcaps.core.user.webapp.controller;

import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

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

import mcap.core.base.webapp.controller.BaseFormController;
import mcap.core.user.model.Role;
import mcap.core.user.service.RoleExistsException;
import mcap.core.user.service.RoleManager;
import mcap.core.user.util.NameConstants;

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 RoleManager to
 * handle request to retrieve/persist Role info to data store.
 * @author Tan Beng Suang
 * @date 30-Aug-2005
 * @version 1.0.1.0
 */
public class RoleFormController extends BaseFormController {
	
	private RoleManager roleManager;

	/**
	 * 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) {
			if (!StringUtils.equals (request.getParameter ("from"), "list")) {
				return new ModelAndView (getCancelView ());
			}
			else {
				return new ModelAndView (getSuccessView ());
			}
		}

		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 {
		
		Role role = (Role) command;
		
		Locale locale = request.getLocale ();
		
		if (request.getParameter ("delete") != null) {
			// request to delete role.
			
			this.getRoleManager ().removeRole (role.getName ());
			saveMessage (request, getText ("role.deleted", role.getName (), locale));

			return new ModelAndView (getSuccessView ());
		}
		else {
			
			String[] roleUsers = request.getParameterValues ("roleUsers");
			
			role.getUsers ().clear ();
			
			if (roleUsers != null) {
				Set users = new HashSet ();
				for (int i = 0; i < roleUsers.length; i++) {
					String username = roleUsers[i];
					users.add (getUserManager ().getUser (username));
				}
				
				//force acegi to reload the user's roles.
				role.setUsers (users);
			}
			
			// try saving the role information.
			try {
				this.getRoleManager ().saveRole (role);
			}
			catch (RoleExistsException e) {
				errors.rejectValue ("name", "errors.existing.role", new Object[] { role
						.getName () }, "duplicate role");
				if (StringUtils.equals (request.getParameter ("method"), "Add"))
					role.setVersion(null);
				
				return showForm (request, response, errors);
			}

			if (StringUtils.equals (request.getParameter ("method"), "Add")) {
				saveMessage (request, getText ("role.saved", role.getName (), locale));

				// return to main Menu
				return new ModelAndView (new RedirectView ("listRoles.action"));
			}
			else {
				saveMessage (request, getText ("role.updated", role.getName (), locale));
					
				return new ModelAndView (new RedirectView ("listRoles.action"));
			}
		}
	}

	/**
	 * 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 ("editRole") > -1)
				&& (!request.isUserInRole (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 {
		
		String name = request.getParameter ("name");

		Role role = null;

		if (!StringUtils.isBlank (name)
				&& !"".equals (request.getParameter ("version"))) {
			role = this.getRoleManager ().getRole (name);
		}
		else {
			role = new Role ();
		}

		return role;
	}

	protected void onBind (HttpServletRequest request, Object command)
			throws Exception {
		// if the user is being deleted, turn off validation
		if (request.getParameter ("delete") != null) {
			super.setValidateOnBinding (false);
		}
		else {
			super.setValidateOnBinding (true);
		}
	}
	
	
}

⌨️ 快捷键说明

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