首先我定义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;
}
}
答案 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从第一个控制器到第二个控制器并将请求中的用户作为属性
传递