2014-01-11 87 views
0

我無法爲第二個請求獲取ModelAttribute。 我的第一個請求是initForm()方法,我準備了Command對象並能夠在jsp中顯示該命令。無法在spring中填充modelAttribute

通過initForm()我填充命令和那個命令,我想在editForm,當我會做ajax調用。

這裏是我的春天形式

<form:form method="POST" action="addstudentdetails.htm" commandName="command"> 
Ignore what is inside this 

Name: Shoaib Age:23 <a href="#" onclick="editstudentdetails(1,0)">edit</a> 

</form:form> 

我的Ajax請求:

function editStudentDetails(studentId,index){ 
     $.ajax(
     {url:"editstudentdetails.htm", 
     method:"GET", 
     data:{"action":"edit","id":studentId,"index":index}, 
      success: function(data) { 
        jQuery("#studentDetailsDiv").html(data) 
      } 

     } 

    ) 
    } 

editStudentDetails()方法,我有方法Ajax調用去控制器的editForm()

這裏是我的控制器:

@Controller 

public class StudentDetailsController { 

@Autowired 
private StudentDetailsDAO studentDetailsDAO; 

@RequestMapping(value="/studentdetails.htm",method = RequestMethod.GET) 
public String initForm(HttpServletRequest request,ModelMap map){ 
    String action=request.getParameter("action"); 
    StudentDetailsCommand command=new StudentDetailsCommand(); 
    System.out.println("in controller"+action); 
    command.setStudents(studentDetailsDAO.findAll()); 
    map.addAttribute("command", command); 

    return "studentdetails"; 
} 

@RequestMapping(value="/editstudentdetails.htm",method = RequestMethod.GET) 
public String editForm(ModelMap map,HttpServletRequest request){ 
    map.addObject("index", request.getParameter("index")); 
    StudentDetailsCommand command=(StudentDetailsCommand)map.get("command"); 
    System.out.println(command); 
    System.out.println(command.getStudents());//NullPointerException here. 
    map.addObject("command", command); 
    return "studentdetails"; 
} 
} 

偶試過@ModelAttribute( 「studentDetailsCommand」),但沒有奏效。

我是Spring 3.0的新手,我遵循這裏給出的所有解決方案,但沒有任何成果。可以幫助我嗎?

+0

什麼是第二個請求?你在說什麼模型屬性? –

+0

由ajax調用的第二個請求,它來自editForm方法,我通過map.get(「xxx」)得到它 –

+0

當我點擊編輯鏈接時,它是我發送的ajax請求。讓我添加ajax方法。 –

回答

1

模型屬性僅在一個HttpServletRequest的生命週期中存在。考慮閱讀my answer here

在你initForm方法,你就以下

map.addAttribute("command", command); 

此添加名爲command到模型屬性的屬性。該屬性最終將找到其HttpServletRequest屬性的方式,並可供您的JSP使用。在這裏

<form:form [...] modelAttribute="studentDetailsCommand" commandName="command"> 

首先,modelAttributecommandName有異曲同工之妙,即。在模型中查找屬性。如果您刪除commandName,您將得到一個異常,因爲沒有名爲studentDetailsCommand的模型屬性。這裏你的commandName的值是覆蓋你的modelAttribute的值。

當Servlet容器完成呈現您的JSP時,呈現的內容將作爲HTTP響應的主體發送。此時,請求已被處理,並且HttpServletRequest和模型屬性被垃圾收集。

當您通過AJAX發送新請求時,不再有任何名爲studentDetailsCommand的模型屬性(實際上從來沒有)。

考慮使用Flash Attributes

相關:

+0

所以,你可以告訴我如何解決我的問題。我應該從表單中刪除我的modelAttribute,或者將其更改爲「command」。請檢查我更新的問題,我遵循了您的建議。 –

+0

+1爲了很好的解釋。 –

+0

@ShoaibChikate是的,使用'modelAttribute'或'commandName',而不是兩者。正如我在我的回答中所述,查看閃存屬性。 –