在Spring MVC控制器之间发送数据

时间:2015-02-06 21:56:29

标签: java spring jsp spring-mvc

首先我定义User类:

public class User implements Serializable{

    private int id;
    private String name;    

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getNombre() {
        return name;
    }

    public void setNombre(String name) {
        this.name = name;
    }
}

我正在做的应用程序负责重命名用户,首先定义选择要重命名的用户的id的负责视图(modifyUser.jsp):

<html>
<body>
    <form:form method="post" commandName="modifyUser">
        <table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
            <tr>
                <td align="right" width="20%">Id:</td>
                <td width="20%">
                    <form:input path="id"/>
                </td>
            </tr>
        </table>
        <br>
        <input type="submit" align="center" value="Execute">
    </form:form>
</body>
</html>

驱动程序负责管理此视图是(ModifyUserFormController):

public class ModifyUserFormController extends SimpleFormController {
    protected final Log logger = LogFactory.getLog(getClass());
    private UsuarioManager usuarioManager;

    public ModelAndView onSubmit(Object command)
        throws ServletException {
        int id = ((ModifyUser) command).getId();
        Usuario user = usuarioManager.consultUsuarioDao(id);  
        Map<String, Object> myModel = new HashMap<String, Object>();
        myModel.put("usuario", user);
        return new ModelAndView("showModifyUser", "model" ,myModel);
    }
    protected Object formBackingObject(HttpServletRequest request)
        throws ServletException {

        ModifyUser user = new ModifyUser();
        user.setId(5);
        return user;
    }

    public void setUsuarioManager(UsuarioManager usuarioManager) {
        this.usuarioManager = usuarioManager;
    }
}

它通过您从视图中获取的ID获取用户的名称。该驱动程序将负责发送名称以修改另一个关系视图控制器,以便编辑和存储在DB中。

我在这里遇到问题,因为我认为我没有正确定义视图或控制器,因为我希望视图显示当前名称作为id,但只将字段设为空。

视图是showModifyUser.jsp

<html>
<head/>
<body>
    <form:form method="post" commandName="showModifyUser">
        <table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
            <tr>
                <td align="right" width="20%">Nombre:</td>
                <td width="20%">
                    <form:input path="nombre" value = "${model.usuario.nombre}"/>
                </td>
            </tr>
        </table>
        <br>
        <input type="submit" align="center" value="Execute">
    </form:form>
</body>
</html>

控制器是showModifyUserFormController:

public class ShowModifyUserFormController extends SimpleFormController {

    protected final Log logger = LogFactory.getLog(getClass());
    private UsuarioManager usuarioManager;

    public ModelAndView onSubmit(Object command)
            throws ServletException {

        String nombre = ((CreateUser) command).getNombre();

        CreateUser user = new CreateUser();
        user.setNombre(nombre);

        usuarioManager.saveUsuarioDao(user);

        return new ModelAndView(new RedirectView(getSuccessView()));

    }

    protected Object formBackingObject(HttpServletRequest request) throws Exception {
        CreateUser user = new CreateUser();      
        return user;
    }

    public void setUsuarioManager(UsuarioManager usuarioManager) {
        this.usuarioManager = usuarioManager;
    }

    public UsuarioManager getUsuarioManager() {
        return usuarioManager;
    }
}

1 个答案:

答案 0 :(得分:0)

1)为什么你不使用Spring MVC 3?它比2.x

更方便,更简单

2)您可以使用一个控制器类

来完成

您带来新用户对象以编辑表单的问题,这就是为什么您没有看到填充名称字段的原因,您需要将传递的对象从第一个控制器带到您的编辑表单。我不确定,但你可以试试第二个控制器

   protected Object formBackingObject(HttpServletRequest request) throws Exception {
    User user = null;
    if (request.getAttribute("usuario") != null)
        user = (User) request.getAttribute("usuario");
    else
         user = new CreateUser();      
    return user;
}

如果这不起作用,你可以尝试:

1)将Id作为参数传递,并将用户置于formBackingObject方法的第二个受控方法

2)将用户对象放入第一个控制器的会话中,并将其放入第二个控制器的formBackingObject

3)使用forfward从第一个控制器到第二个控制器并将请求中的用户作为属性

传递