2015-02-06 47 views
1

首先我定義User類:Spring MVC控制器之間發送數據

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,但只有字段爲空。

的看法是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

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)把用戶對象到會話在第一控制器,並得到它在第二控制器

3的formBackingObject)從第一控制器forfward使用到第二和在請求傳遞用戶作爲屬性

+0

非常感謝,第一個選項對我來說效果很好「 – Tania 2015-02-07 12:13:44