I’m trying to use Json with struts 2 and jquery, I am able to do it up to a level but I have been stucking in some problem for last two days. Here are the codes and configuration that i’ve used for this
<package name="default" extends="struts-default,json-default" namespace="/">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"></result-type>
</result-types>
<action name="showUpdateAjax" class="courseCreateAction" method="showUpdateAjax">
<result type="json">
<param name="includeProperties">courseInfo, fetchedAllSubjects, selectedFetchedSubs, subjectList, fetchedAllExamType, examTypeList, selectedExmTypes, fetchedAllCourse, isUpdate, btnPressed, updateCourseId, nextCourse, previousCourse</param>
<param name="prefix">true</param>
<param name="ignoreHierarchy">false</param>
</result>
</action>
Here is my Jsp codes for this part
<tr><td><input type="submit" value="Refresh" onclick="refreshData()" id="refreshBtn"/></td></tr>
<tr><td><s:a href="/SASIS/showUpdateAjax.action?updateCourseId=4">click Here 2</s:a></td></tr>
</table>
</center>
<script type="text/javascript">
$(document).ready(function(){
$("#refreshBtn").click(function(){
$.getJSON("/SASIS/showUpdateAjax.action?updateCourseId=4",function(data){
alert('its working '+data);
});
});
});
</script>
And here is my java code
public class CourseCreateAction extends ActionSupport implements ServletRequestAware{
private CourseInfo courseInfo;
private List fetchedAllSubjects;
private List<SubjectInfo> selectedFetchedSubs;
private List subjectList;
private List fetchedAllExamType;
private List examTypeList;
private List<ExamType> selectedExmTypes;
private List fetchedAllCourse;
private String nextCourse;
private String previousCourse;
private DAOInterface dao;
private String btnPressed;
private String updateCourseId;
private HttpServletRequest request;
private boolean isUpdate;
public void setServletRequest(HttpServletRequest request) {
request=request;
}
public List getFetchedAllSubjects() {
return fetchedAllSubjects;
}
public void setFetchedAllSubjects(List fetchedAllSubjects) {
this.fetchedAllSubjects = fetchedAllSubjects;
}
public List<SubjectInfo> getSelectedFetchedSubs() {
return selectedFetchedSubs;
}
public void setSelectedFetchedSubs(List<SubjectInfo> selectedFetchedSubs) {
this.selectedFetchedSubs = selectedFetchedSubs;
}
public List getSubjectList() {
return subjectList;
}
public void setSubjectList(List subjectList) {
this.subjectList = subjectList;
}
public CourseInfo getCourseInfo() {
return courseInfo;
}
public void setCourseInfo(CourseInfo courseInfo) {
this.courseInfo = courseInfo;
}
public List getFetchedAllExamType() {
return fetchedAllExamType;
}
public void setFetchedAllExamType(List fetchedAllExamType) {
this.fetchedAllExamType = fetchedAllExamType;
}
public List getExamTypeList() {
return examTypeList;
}
public void setExamTypeList(List examTypeList) {
this.examTypeList = examTypeList;
}
public List<ExamType> getSelectedExmTypes() {
return selectedExmTypes;
}
public void setSelectedExmTypes(List<ExamType> selectedExmTypes) {
this.selectedExmTypes = selectedExmTypes;
}
public List getFetchedAllCourse() {
return fetchedAllCourse;
}
public void setFetchedAllCourse(List fetchedAllCourse) {
this.fetchedAllCourse = fetchedAllCourse;
}
public String getNextCourse() {
return nextCourse;
}
public void setNextCourse(String nextCourse) {
this.nextCourse = nextCourse;
}
public String getPreviousCourse() {
return previousCourse;
}
public void setPreviousCourse(String previousCourse) {
this.previousCourse = previousCourse;
}
public DAOInterface getDao() {
return dao;
}
public void setDao(DAOInterface dao) {
this.dao = dao;
}
public String getBtnPressed() {
return btnPressed;
}
public void setBtnPressed(String btnPressed) {
this.btnPressed = btnPressed;
}
public String getUpdateCourseId() {
return updateCourseId;
}
public void setUpdateCourseId(String updateCourseId) {
this.updateCourseId = updateCourseId;
}
public boolean getIsUpdate() {
return isUpdate;
}
public void setIsUpdate(boolean isUpdate) {
this.isUpdate = isUpdate;
}
public String showUpdateAjax(){
try{
System.out.println("Ajax calling...........");
showUpdateCourse();
}catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String showUpdateCourse(){
try {
isUpdate=true;
courseInfo=dao.getCourse(Integer.parseInt(updateCourseId));
System.out.println(courseInfo.getCourseId());
selectedFetchedSubs=courseInfo.getSubjectList();
selectedExmTypes=courseInfo.getExamTypeList();
fetchedAllSubjects=dao.getAllSubjects();
fetchedAllExamType=dao.getActiveExamTypes();
for(ExamType exmType:selectedExmTypes)
for (int i = 0; i < fetchedAllExamType.size(); i++) {
if(exmType!=null&&((ExamType)fetchedAllExamType.get(i)).getExamTypeId()==exmType.getExamTypeId()){
fetchedAllExamType.remove(i);
break;
}
}
for(SubjectInfo subInfo:selectedFetchedSubs)
for (int i = 0; i < fetchedAllSubjects.size(); i++) {
if(subInfo!=null&&((SubjectInfo)fetchedAllSubjects.get(i)).getSubjectId()==subInfo.getSubjectId()){
fetchedAllSubjects.remove(i);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
I have used spring and hibernate in project as well. While doing this when I click on the link which is calling the showUpdateAction.action I got response like this
{}&& {"btnPressed":null,"courseInfo":{},"examTypeList":null,"fetchedAllCourse":[],"fetchedAllExamType":[],"fetchedAllSubjects":[],"isUpdate":true,"nextCourse":null,"previousCourse":null,"selectedExmTypes":[],"selectedFetchedSubs":[],"subjectList":null,"updateCourseId":"4"}
But when I click on the button its not showing anything, but the function is called. Moreover here CourseInfo is an object where there are variables with setter getter methods and this object is state full when the showUpdateAction.action is called, but in the output we can see the courseInfo is with empty curly braces. Please help to solve this problem I have gone through several posts and googled a lot. Now I have no option except asking. Please help
Thank you for your replies Mr. mprabhat and Mr. Rahul. I used firebug to debug this problem, as Rahul told me to use webinspector for the purpose, as I am using firefox I preferred firebug. And I did really get help to solve the jquery problem as suggested by mprabhat.
Now, the actual problem was with struts-jquery plugin and spring. In my code for ‘dao’ the object is injected through spring. While json plugin was trying to serialize the object it founded a method of the database object with public access modifier. Which somehow creates all the problems. I got an exception like below while trying to return the json without ‘
includeProperties‘ paramTherefore I decided to exclude the property ‘dao’ in my struts configuration instead of including the rest of the properties.
And the problem is solved.