如何在一个jsp中使用两个提交并调用两个动作

时间:2011-09-17 13:11:30

标签: spring jsp spring-mvc jstl

我正在使用spring mvc框架。我在页面上有两个提交按钮。转发请求到两个不同的控制器。我如何在单个jsp页面上使用两个动作。 请建议。

我的控制器是

1

@RequestMapping(value = "/user/reset", method = RequestMethod.POST)
        public String editUser(@ModelAttribute("users") User user,
                BindingResult result) {
            Integer uid=user.getId();
            User resetUser = usersService.findUser(uid);
            resetUser.setActive(0);
            ResetPasswordLog resetPasswordLog=new ResetPasswordLog();
            usersService.addUsers(resetUser);
            resetPasswordLogService.setTempHash(uid);
            String TEMPHASH= resetPasswordLog.getTempHash();
            System.out.println("www.lacas.com/reset?uid="+uid+"&th="+TEMPHASH);
            return "redirect:/secure/user/" + uid;

            }

2

@RequestMapping(value = "/user/edit", method = RequestMethod.POST)
    public String addUser(@ModelAttribute("users") UserForm userForm,
            BindingResult result) {
        Map<String, String> map = new LinkedHashMap<String, String>();
        User user = usersService.findUser(userForm.getId());
        Integer userId = userForm.getId();

        User newUser = usersService.findUser(userForm.getEmail());
        user.setName(userForm.getName());
        if (newUser == null) {
            user.setEmail(userForm.getEmail());
            user.getRoles().clear();
            Integer[] roleIds = userForm.getRoleIds();
            for (Integer roleId : roleIds) {
                if (roleId != 0) {
                    Role role = roleService.findRole(roleId);
                    user.getRoles().add(role);
                }
            }
            usersService.addUsers(user);
            return "redirect:/secure/users/index";

        } else {

            edit_exist_user = true;
            return "redirect:/secure/user/" + userId;

        }
    }

2 个答案:

答案 0 :(得分:1)

您可以使用JavaScript,动态更改表单的action属性。如果这是你的表格:

<form id="myform" action="#" onsubmit="return pickDestination();">
    <input type="submit" name="sbmitbtn" value="edit" onclick="document.pressed=this.value"/>
    <input type="submit" name="sbmitbtn" value="reset" onclick="document.pressed=this.value"/>
</form>

然后你的pickDestination JS函数看起来像:

function pickDestination()
{
    var a = "/user/" + document.pressed;
    document.getElementById("myform").action = a;
    return true;
}

答案 1 :(得分:0)

我将通过说我对spring应用程序不是很熟悉来做序,但是在许多其他基于java的MVC系统中我通过简单地给我的提交按钮命名并解析它来实现这一点。动作类通过检查请求。

例如,查找其参数名称使用的提交按钮,调用相应的方法。以下是我偶尔使用的基于struts的解决方案的示例。如果您可以访问Spring控制器中的servlet请求对象,则可以执行类似的操作。

@Override
public String execute() throws Exception {
    try {
        // Check the request for a someone clicking the logout submit button
        if (found("logout")) {
            user.logout(); //invoke the logout method
            session.remove("user");
            return SUCCESS;
        }

        // Check the request for a someone clicking the login submit button
        if (found("login")) {
            user.login();
            session.put("user", user);          
            return "login";
        }

    // Catch any login exceptions
    } catch (Exception e) {
        user = null;
        addActionError(e.getMessage());
        return INPUT;
    }

    return SUCCESS;
}

// The following method checks for a request paramater based on the key (String)
// provided. If the key is not found or the value for the parameters is empty, it 
// returns false;
private boolean found(String param) {
    Object temp = request.getParameter(param);
    if (temp != null) {
        if (temp.toString().isEmpty()) {
            return false;
        }
        return true;
    } else {
        return false;
    }
}