我有一个教师实体,主题和标记实体。每个教师都有一份初步科目清单。
当参赛者想要申请一些教师时,他应该在初级科目中留下他的分数,并从他的学校文凭(大学,无论如何)中留下分数。
我希望能够将这些值设为key-value
对subject-mark
。
所以现在我作为请求属性传递给apply.jsp
第2页List<Subject>
。一个List
包含all subjects
- 这是用于文凭,另一个List
包含faculty subjects
- 它们是初步的。
我的apply.jsp
页面如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Apply for ${faculty.name}</title>
</head>
<body>
You are in client apply for faculty view!
<h1>${name}</h1>
<ul>
<li><label>Faculty name: </label> <c:out value="${name}"></c:out></li>
<li><label>Total seats: </label> <c:out value="${total_seats}"></c:out></li>
<li><label>Budget seats: </label> <c:out value="${budget_seats}"></c:out></li>
</ul>
<form action="controller" method="POST">
<input type="hidden" name="command" value="applyFaculty" /> <input
type="hidden" name="show" value="false" /> <input type="hidden"
name="facultySubjects" value="${facultySubjects}" /> <input
type="hidden" name="allSubjects" value="${allSubjects}" />
<h1>Your preliminary marks</h1>
<table id="preliminary">
<c:forEach var="facultySubject" items="${facultySubjects}">
<tr>
<td><c:out value="${facultySubject.name}">${facultySubject.name}</c:out>
</td>
<td><input type="text" name="preliminaryMark" value="" /></td>
</tr>
</c:forEach>
</table>
<h1>Your diploma marks</h1>
<table id="diploma">
<c:forEach var="subject" items="${allSubjects}">
<tr>
<td><c:out value="${subject.id}">${subject.name}</c:out></td>
<td><input type="text" name="diplomaMark" value="" /></td>
</tr>
</c:forEach>
</table>
<p>
<input type="submit" value="OK">
</p>
</form>
</body>
</html>
那么我应该如何转换它以实现所需的功能呢?
PS。如果它更简单 - 实际上我只需要知道Subject
id
字段来在数据库中创建所需的insert
。
答案 0 :(得分:1)
请尝试以下内容:
<c:forEach var="facultySubject" items="${facultySubjects}">
<tr>
<td><c:out value="${facultySubject.name}">${facultySubject.name}</c:out>
</td>
<td><input type="text" name="subject_${facultySubject.id}" value="" /></td>
</tr>
</c:forEach>
并在您的servlet中执行以下操作:
Map<String, String[]> parameterMap = request.getParameterMap();
for (String key: parameterMap.keySet()) {
if (key.startsWith("subject_")) {
// do what ever you want here
}
}
希望能帮助。
答案 1 :(得分:1)
Amrola带来了想法,我认为这非常好。
在这个答案中,我将添加我的代码示例,这符合我的目的。
所以apply.jsp
看起来像是:
<form action="controller" method="POST">
<input type="hidden" name="command" value="applyFaculty" />
<input type="hidden" name="facultyId" value="${id}" /><input
type="hidden" name="show" value="false" />
<h1>Your preliminary marks</h1>
<table id="preliminary">
<c:forEach var="facultySubject" items="${facultySubjects}">
<tr>
<td><c:out value="${facultySubject.name}">${facultySubject.name}</c:out>
</td>
<td><input type="text" name="${facultySubject.id}_preliminary" value="" /></td>
</tr>
</c:forEach>
</table>
<h1>Your diploma marks</h1>
<table id="diploma">
<c:forEach var="subject" items="${allSubjects}">
<tr>
<td><c:out value="${subject.name}">${subject.name}</c:out>
</td>
<td><input type="text" name="${subject.id}_diploma" value="" /></td>
</tr>
</c:forEach>
</table>
<p>
<input type="submit" value="OK">
</p>
</form>
在我的servlet中,我正在以下一种方式工作:
Map<String, String[]> parameterMap = request.getParameterMap();
for (String parameterName : parameterMap.keySet()) {
if (parameterName.endsWith("preliminary")
|| parameterName.endsWith("diploma")) {
String[] value = parameterMap.get(parameterName);
Byte markValue = Byte.valueOf(value[0]);
String[] subjectIdAndExamType = parameterName
.split("_");
Integer subjectId = Integer
.valueOf(subjectIdAndExamType[0]);
String examType = subjectIdAndExamType[1];
Mark mark = new Mark(subjectId, entrant.getId(),
markValue, examType);
...// another logic
总而言之 - 从下一行开始:
<input type="text" name="${facultySubject.id}_preliminary" value="" />
或
<input type="text" name="${subject.id}_diploma" value="" />
在servlet中我有:
因此,对于您的问题,您可以在name
属性中使用任何参数组合,然后通过指定的正则表达式在servlet中提取它们。