userpreferenceformcontroller.java

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

JAVA
209
字号
package mcaps.core.preference.webapp.controller;

import java.text.DecimalFormat;
import java.util.Locale;

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

import mcap.core.base.webapp.controller.BaseFormController;
import mcap.core.preference.model.Preference;
import mcap.core.preference.model.PreferenceSet;
import mcap.core.preference.service.PreferenceManager;
import mcap.core.preference.util.NameConstants;
import mcaps.core.preference.webapp.command.UserPreferenceCommand;
import mcaps.core.preference.webapp.filter.LocaleRequestWrapper;

import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;


/**
 * Implementation of BaseFormController that interacts with the 
 * PreferenceManager to handle request to retrieve/persist user preference 
 * info to data store.
 * 
 * Note that this need to be modified when new preference is added.
 * 
 * @author Tan Beng Suang
 * @date 01-Sep-2005
 * @version 1.0.1.0
 */
public class UserPreferenceFormController extends BaseFormController {

	private PreferenceManager preferenceManager;

	
	/**
	 * Returns the preferenceManager.
	 * @return PreferenceManager
	 */
	public PreferenceManager getPreferenceManager () {
		return preferenceManager;
	}

	
	/**
	 * Sets the preferenceManager.
	 * @param preferenceManager The preferenceManager to set.
	 */
	public void setPreferenceManager (PreferenceManager preferenceManager) {
		this.preferenceManager = preferenceManager;
	}
	
//----------------------------------------------------------------------
	// ----------------------------------------------------------------------

	/**
	 * 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) {
			return new ModelAndView (getCancelView ());
		}
		
		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 {
		
		UserPreferenceCommand pref = (UserPreferenceCommand) command;
		
		Locale locale = request.getLocale ();
		
		PreferenceSet set = preferenceManager.getPreferenceSet(request.getRemoteUser());
		
		if (request.getParameter("reset") != null) {
			//	reset user preference to system default.
			try {
				set.removeAll ();
				preferenceManager.savePreferenceSet (set);
			}
			catch (Exception e) {
				errors.reject ("errors.userPreference.reset", "fail to reset user preference");
				return showForm (request, response, errors);
			}
			
			saveMessage (request, getText ("userPreference.reset", "",
					locale));
			
			return new ModelAndView (new RedirectView ("editUserPreference.action"));
		}
		else {
			try {
				set.setValue ("pageSize", pref.getPageSize().toString());
				set.setValue ("locale", pref.getLocale());
				set.setValue ("theme", pref.getTheme().toString());
				set.setValue ("menu", pref.getMenu().toString());
			}
			catch (Exception e){}
		
			preferenceManager.savePreferenceSet(set);
		
			HttpSession session = request.getSession();
			locale = new Locale (pref.getLocale());
			session.setAttribute (NameConstants.PREFERRED_LOCALE, locale);
			LocaleContextHolder.setLocale (locale);
			if (request instanceof LocaleRequestWrapper) {
				((LocaleRequestWrapper) request).setLocale(locale);
			}
			
			
			saveMessage (request, getText ("userPreference.saved", "",
					locale));

			// return to main Menu
			return new ModelAndView (new RedirectView ("mainPage.action"));
		}
	}
	
	
	/**
	 * calling in case of validation errors, to show the form view again.
	 * 
	 */
	protected ModelAndView showForm (HttpServletRequest request,
			HttpServletResponse response, BindException errors) throws Exception {

		if (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 user = request.getRemoteUser();
		
		PreferenceSet prefSet = preferenceManager.getPreferenceSet(user);
		
		UserPreferenceCommand command = new UserPreferenceCommand ();
		
		Preference pref = prefSet.get("pageSize");
		
		command.setPageSize (new Integer (pref.getValue()));
		
		pref = prefSet.get("locale");
		
		command.setLocale(pref.getValue());
		
		pref = prefSet.get("theme");
		
		command.setTheme(pref.getValue());
		
		pref = prefSet.get("menu");
		
		command.setMenu(pref.getValue());
		
		return command;
	}

	protected void onBind (HttpServletRequest request, Object command)
			throws Exception {
		
		// if the user is being deleted, turn off validation
		if (request.getParameter ("reset") != null) {
			super.setValidateOnBinding (false);
		}
		else {
			super.setValidateOnBinding (true);
		}
	}
	
	protected void initBinder (HttpServletRequest request,
			ServletRequestDataBinder binder) {
		
		super.initBinder(request, binder);
		
		DecimalFormat df = new DecimalFormat ("#########");
		
		binder.registerCustomEditor (Integer.class, null, new CustomNumberEditor (
				Integer.class, df, true));
	}
	
	
}

⌨️ 快捷键说明

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