Java 如何让struts2仅在POST上验证

Java 如何让struts2仅在POST上验证,java,struts2,Java,Struts2,例如,我有一个add方法,它在“get”中显示一个表单 在“post”中添加逻辑,即验证、调用服务方法等 在“获取”阶段,我不想验证 但struts2始终在这两个阶段有效 如何将struts2配置为仅在“post”上验证?忘记REST行为调用同一URL并根据您使用的Http谓词执行不同的操作: @RequestMapping(value = "/foo", method = RequestMethod.GET) public ModelAndView ReadFoobar(Locale loca

例如,我有一个add方法,它在“get”中显示一个表单

在“post”中添加逻辑,即验证、调用服务方法等

在“获取”阶段,我不想验证

但struts2始终在这两个阶段有效


如何将struts2配置为仅在“post”上验证?

忘记REST行为调用同一URL并根据您使用的Http谓词执行不同的操作:

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public ModelAndView ReadFoobar(Locale locale, 
                               Model model, 
                               HttpServletRequest request){
    String foobar = getService().loadFoobar();
    ModelAndView mav = new ModelAndView("foobarPage")
    mav.addObject("foobar",foobar);
    return mav;
}

@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String InsertStuff(@RequestParam("stuff") String stuff,
                          Locale loc, 
                          Model model,
                          HttpServletRequest req){
    validate();
    getService().insertStuff(stuff);
    return "stuffPage";
}
这是Spring MVC,这是Struts2。你需要用行动来推理;不要使用Http谓词,而是使用不同的操作并仅为其中一个定义验证。例如:

表示GET的操作

public class ReadFoobar {

    @Getter private String foobar;

    public String execute(){
        foobar = getService().loadFoobar();
        return SUCCESS;
    }

}
代表职位的行动

public class InsertStuff {

    @Setter private String stuff = "";

    public String execute(){
        getService().insertStuff(stuff);
        return SUCCESS;
    }

    public void validate(){
        if (stuff.length()<3){
            addFieldError("stuff","The mininum length is 3");
        }
    }
}

我也喜欢SpringMVC,但是如果您想要/需要/正在使用Struts2,请按照设计的正确方式使用它,否则它可能会变成一场噩梦;)

忘记REST行为调用同一URL,并根据您使用的Http谓词执行不同的操作:

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public ModelAndView ReadFoobar(Locale locale, 
                               Model model, 
                               HttpServletRequest request){
    String foobar = getService().loadFoobar();
    ModelAndView mav = new ModelAndView("foobarPage")
    mav.addObject("foobar",foobar);
    return mav;
}

@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String InsertStuff(@RequestParam("stuff") String stuff,
                          Locale loc, 
                          Model model,
                          HttpServletRequest req){
    validate();
    getService().insertStuff(stuff);
    return "stuffPage";
}
这是Spring MVC,这是Struts2。你需要用行动来推理;不要使用Http谓词,而是使用不同的操作并仅为其中一个定义验证。例如:

表示GET的操作

public class ReadFoobar {

    @Getter private String foobar;

    public String execute(){
        foobar = getService().loadFoobar();
        return SUCCESS;
    }

}
代表职位的行动

public class InsertStuff {

    @Setter private String stuff = "";

    public String execute(){
        getService().insertStuff(stuff);
        return SUCCESS;
    }

    public void validate(){
        if (stuff.length()<3){
            addFieldError("stuff","The mininum length is 3");
        }
    }
}

我也喜欢SpringMVC,但是如果您想要/需要/正在使用Struts2,请按照设计的正确方式使用它,否则它可能会变成一场噩梦;)

忘记REST行为调用同一URL,并根据您使用的Http谓词执行不同的操作:

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public ModelAndView ReadFoobar(Locale locale, 
                               Model model, 
                               HttpServletRequest request){
    String foobar = getService().loadFoobar();
    ModelAndView mav = new ModelAndView("foobarPage")
    mav.addObject("foobar",foobar);
    return mav;
}

@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String InsertStuff(@RequestParam("stuff") String stuff,
                          Locale loc, 
                          Model model,
                          HttpServletRequest req){
    validate();
    getService().insertStuff(stuff);
    return "stuffPage";
}
这是Spring MVC,这是Struts2。你需要用行动来推理;不要使用Http谓词,而是使用不同的操作并仅为其中一个定义验证。例如:

表示GET的操作

public class ReadFoobar {

    @Getter private String foobar;

    public String execute(){
        foobar = getService().loadFoobar();
        return SUCCESS;
    }

}
代表职位的行动

public class InsertStuff {

    @Setter private String stuff = "";

    public String execute(){
        getService().insertStuff(stuff);
        return SUCCESS;
    }

    public void validate(){
        if (stuff.length()<3){
            addFieldError("stuff","The mininum length is 3");
        }
    }
}

我也喜欢SpringMVC,但是如果您想要/需要/正在使用Struts2,请按照设计的正确方式使用它,否则它可能会变成一场噩梦;)

忘记REST行为调用同一URL,并根据您使用的Http谓词执行不同的操作:

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public ModelAndView ReadFoobar(Locale locale, 
                               Model model, 
                               HttpServletRequest request){
    String foobar = getService().loadFoobar();
    ModelAndView mav = new ModelAndView("foobarPage")
    mav.addObject("foobar",foobar);
    return mav;
}

@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String InsertStuff(@RequestParam("stuff") String stuff,
                          Locale loc, 
                          Model model,
                          HttpServletRequest req){
    validate();
    getService().insertStuff(stuff);
    return "stuffPage";
}
这是Spring MVC,这是Struts2。你需要用行动来推理;不要使用Http谓词,而是使用不同的操作并仅为其中一个定义验证。例如:

表示GET的操作

public class ReadFoobar {

    @Getter private String foobar;

    public String execute(){
        foobar = getService().loadFoobar();
        return SUCCESS;
    }

}
代表职位的行动

public class InsertStuff {

    @Setter private String stuff = "";

    public String execute(){
        getService().insertStuff(stuff);
        return SUCCESS;
    }

    public void validate(){
        if (stuff.length()<3){
            addFieldError("stuff","The mininum length is 3");
        }
    }
}
我也喜欢SpringMVC,但是如果您想要/需要/正在使用Struts2,请按照设计的正确方式使用它,否则它可能会变成一场噩梦;)