2015-09-06 93 views
0

我正在開發一個簡單的Spring MVC項目。我無法從複選框獲取值。我的意思是,當用戶從3中檢查2個框時,所有3個都被綁定到一個列表,未檢查的值爲空。這是錯誤的。我只想要檢查的值。那些沒有得到檢查的人不應該列入清單。 這是我的代碼片段: POJO:從複選框獲取空值

public class Student{ 
private List<StudentCourses> sc; 
//getters and setters 
} 

public class StudentCourses{ 
private int courseID; 
private String courseName; 
private Character grade; 
private String semesterID; 
//getters and setters 
} 

這是我從我的控制器發送:

@RequestMapping(value = "/selectclasses", method = RequestMethod.POST) 
public String selectClasses(Model m) { 
Student s = new Student(); 
List<StudentCourses> coursesList = new ArrayList<StudentCourses>(); 
coursesList.add(new StudentCourses("Eng 101", '-', "SP 16")); 
coursesList.add(new StudentCourses("Math 140", '-', "SP 16")); 
coursesList.add(new StudentCourses("CS 442", '-', "SP 16")); 
m.addAttribute("coursesList", coursesList); 
m.addAttribute("student", s); 
return "selectclasses"; 
} 

這是我在我的selectclasses.jsp:

<form:form modelAttribute="student" method="post" action="/success"> 
     <table> 
      <c:forEach items="${coursesList}" var="r" begin="0" varStatus="status"> 
       <form:checkbox path="sc[${status.index }].courseName" value="${r.courseName}" label="${r.courseName}" /> 
      </c:forEach> 
     </table> 
     <input type="submit" id="submit" name="submit" value="Submit" /> 
    </form:form> 

我不知道爲什麼null沒有被檢查時傳遞給「sc.courseName」。我究竟做錯了什麼?或者有沒有解決它的方法?請致電 謝謝。

回答

0

我找到了解決方案中獲得的值!

我發現了兩種解決方法。這是使用Spring標籤的解決方案:

<form:checkboxes path="sc" items="${coursesList}" itemValue="courseName" itemLabel="courseName" /> 

在上面的代碼中,itemValue和itemLabel是主要的東西! itemValue和itemLabel只需引用items屬性內的對象的bean屬性(items =「$ {coursesList}」)。簡而言之,如果您需要使用自定義Bean的List作爲items屬性,則還需要使用itemValue和itemLabel屬性。 https://stackoverflow.com/a/15529281/4828463通過@Carlos加維迪亞

現在使用JSTL核心標籤解決方案:款的這一大膽一部分取自

<c:forEach items="${coursesList}" var="courses"> 
     <tr> 
      <td><form:checkbox path="sc" value="${courses.courseName}" label="${courses.courseName}"/></td> 
     </tr> 
    </c:forEach> 

就是這樣。這裏的值屬性和標籤屬性也很重要。

我必須在這裏說的一件事是,當我試圖在網上找到解決方案時,在幾個地方我看到一些人建議@Override hashCode()和equals()方法(在我的情況下在StudentCourses類中) 。我用它測試了我的代碼,但在兩種情況下我都沒有看到任何區別。我的應用程序工作正常。無論如何,如果有人需要查看它,我將發佈這兩種方法的實現。

@Override 
public int hashCode() { 
    int hash = 3; 
    hash = 7 * hash + this.courseName.hashCode(); 
    hash = 7 * hash + this.grade.hashCode(); 
    hash = 7 * hash + this.semesterID.hashCode(); 
    return hash; 
} 

@Override 
public boolean equals(Object object) { 
    boolean result = false; 
    if (object == null || object.getClass() != getClass()) { 
     result = false; 
    } else { 
     StudentCourses sc = (StudentCourses) object; 
     if (this.courseName == sc.getCourseName() 
       && this.grade == sc.getGrade() && this.semesterID == sc.getSemesterID()) { 
      result = true; 
     } 
    } 
    return result; 
} 

再次感謝,希望大家找到解決方案和解釋很有用。

0

只是作家

<input type="checkbox" value="${r.courseName}" id="id"name="name"/> 
在控制器類

使用

String []values=request.getParameterValues(pass the id); 

簡單,你得到的選擇值

+0

對不起隊友我剛剛看到你的答案。我沒有測試過你的解決方案,但我自己找到了解決方案。另外,你正在使用html標籤。我無法使用html標籤。我可以使用JSTL核心標籤或Spring標籤。我即將發佈的解決方案使用JSTL核心標籤和Spring標籤。感謝您嘗試回答我的問題。非常感激。 –