我正在开发一个简单的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 :(得分:0)
简单的作家
<input type="checkbox" value="${r.courseName}" id="id"name="name"/>
控制器类中的使用
获取值String []values=request.getParameterValues(pass the id);
简单地获得所选值
答案 1 :(得分:0)
我找到了解决方案!
我找到了两种解决方法。这是使用Spring标签的解决方案:
<form:checkboxes path="sc" items="${coursesList}" itemValue="courseName" itemLabel="courseName" />
在上面的代码中,itemValue和itemLabel是主要的东西! itemValue和itemLabel只是引用items属性(items =“$ {coursesList}”)中对象的bean属性。简而言之,如果您需要使用自定义Bean列表作为items属性,则还需要使用itemValue和itemLabel属性。段落的这个粗体部分取自:https://stackoverflow.com/a/15529281/4828463 by @卡洛斯加维迪亚
现在使用JSTL核心代码的解决方案:
<c:forEach items="${coursesList}" var="courses">
<tr>
<td><form:checkbox path="sc" value="${courses.courseName}" label="${courses.courseName}"/></td>
</tr>
</c:forEach>
就是这样。同样,value属性和label属性也很重要。
我必须说的一件事是,当我试图在线找到解决方案时,在几个地方我看到有些人建议使用@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;
}
再次感谢,我希望人们发现这个解决方案和解释很有用。