用Spring2.5的 SimpleFormController 时,想在formBackingObject()函数里面设置一个权限控制,验证用户没有权限则跳转,如何跳转?
或者用Spring2.5的 SimpleFormController 时有什么好的方法来控制权限?解决了感激不尽!!!

解决方案 »

  1.   

    以下是代码:
    package cn.com.research.web;import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Component;
    import org.springframework.validation.BindException;
    import org.springframework.validation.Errors;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.ServletRequestUtils;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.SimpleFormController;import cn.com.research.domain.Award;
    import cn.com.research.domain.Log;
    import cn.com.research.domain.Research;
    import cn.com.research.service.AwardService;
    import cn.com.research.service.ResearchService;
    import cn.com.research.util.Env;
    import cn.com.research.validator.AwardValidator;@Component
    public class EditAwardController extends SimpleFormController {
    @Autowired
    Env env;

    @Autowired
    AwardService service;

    @Autowired
    ResearchService researchService; @Autowired
    void setLectureValidator(AwardValidator validator) {
    this.setValidator(validator);
    }

    protected Object formBackingObject(HttpServletRequest request)throws Exception {
    int id = ServletRequestUtils.getIntParameter(request, "id", 0);
    Award award = null;
    if (id != 0) {
    award = service.load(id);
                            if (1) {   //验证权限,不成功则跳转到另一页面list.jsp
                               ......  //如何跳转?
                            }
    } else {
    award = new Award();
    }
    return award;
    } @SuppressWarnings("unchecked")
    @Override
    protected Map referenceData(HttpServletRequest request, Object command,
    Errors errors) throws Exception {
    Map refData = new java.util.HashMap();
    return refData;
    } @Override
    protected void initBinder(HttpServletRequest request,
    ServletRequestDataBinder binder) throws Exception {
    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    CustomDateEditor dateEditor = new CustomDateEditor(fmt,true);
    binder.registerCustomEditor(Date.class, dateEditor);
    super.initBinder(request, binder);
    } protected ModelAndView onSubmit(HttpServletRequest request,
    HttpServletResponse response, Object command, BindException errors)
    throws Exception {
    Award award = (Award) command;
    if (award.getId() == 0) {
    service.create(award);
    } else {
    service.update(award);
    }
    this.setSuccessView("redirect:award/list.htm");
    return new ModelAndView(getSuccessView());
    }
    }
      

  2.   

    哥哥,你都没明白spring的simpleformcontroller是怎么回事。formbackingobject函数,是在初始访问这个页面的时候返回数据在页面中显示。返回的页面是配置文件中的formview。如果你想在打开这个页面的时候就重定向的话,你需要return new ModelAndView(redirect:url)应该是这样的。
      

  3.   

    有个建议,在formBackingObject处理方法里抛出相应的异常,然后注册一个HandlerExceptionResolver的实现类,或者注册SimpleMappingExceptionResolver,然后写程序或配置相应的异常类型挑战到相应的页面