将List中的参数发送到使用@ModelAttribute注释的方法

时间:2016-10-14 14:01:30

标签: spring modelattribute

我有一个列表页面,如下所示,当我点击编辑按钮时,我想将patientId发送到getObject(),这样我就可以在datId存在的情况下从DB加载对象。我在很多方面尝试过,但它在getObject()中将null作为patiendId。 任何建议,将不胜感激。

以下是我的列表页面::

       <c:forEach var="pat" items="${patients}" varStatus="status">
            <tr>                            
            <c:url var="editUrl" value="/patient/${pat.patientId}"/>

                    <td>${pat.firstName}</td>
                    <td>${pat.mobileNumber1}</td>
                    <td>${pat.emailId1}</td>

               <td><a href='<c:out value="${editUrl}"/>'>Edit</a></td>

        </tr>
    </c:forEach>

控制器代码::

@Controller
@RequestMapping(value="/patient")
public class PatientController {

  @ModelAttribute
  public Patient getObject(@RequestParam(required=false) String patientId){

    System.out.println("Model Attribute method :: "+patientId);
    //Here I want to load the object using patientId.
    return(patientId != null ? patientDAO.findPatientById(patientId) : new    Patient());

}

@RequestMapping(value="/{patientId}", method=RequestMethod.GET)
public String editPatient(@PathVariable("patientId")String  patientId){
    System.out.println("Editing Id : "+patientId);
    //Able to get the Id here.
    return "editPage";

}

2 个答案:

答案 0 :(得分:0)

您在一个地方使用@PathVariable而在另一个地方使用@RequestParam并且正在发送路径变量(/ patients / 123而不是请求参数/患者?patientId = 123):使用一个或另一个。

如下更新,应该有效:

  @ModelAttribute
  public Patient getObject(@PathVariable(required=false) String patientId){

    System.out.println("Model Attribute method :: "+patientId);
    //Here I want to load the object using patientId.
    return(patientId != null ? patientDAO.findPatientById(patientId) : new    Patient());

}}

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-methods

答案 1 :(得分:0)

我得到了答案。以下是我的工作代码。希望它会帮助某人。谢谢所有人。

<tr>                                                        
    <c:url var="deleteUrl" value="/patient/delete/${pat.patientId}"/>

            <td>${pat.firstName}</td>
            <td>${pat.mobileNumber1}</td>
            <td>${pat.emailId1}</td>

        <td><a href="newPatient?patientId=${pat.patientId}">Edit</a></td>
        <td><a href='<c:out value="${deleteUrl}"/>'>Delete</a></td>

</tr>
</c:forEach>

控制器代码::

@ModelAttribute
public Patient getObject(@RequestParam(value="patientId", required=false) String patientId){
    System.out.println("Model Attribute method :: "+patientId);

    return (patientId != null ? patientDAO.findPatientById(patientId) : new Patient());     
}

@RequestMapping(value="/newPatient", method=RequestMethod.GET)
public String demo(ModelMap model){

    System.out.println("Demo of Patient");  

    return "newPatient";
}