提交JSP页面请求后转到servlet。在servlet中,我需要将对象发送到同一个JSP页面以填充表单文本字段和下拉列表。
用户将在表单中输入id值,我们需要从数据库中获取数据并需要填写同一页面中的其余字段
最初加载JSP页面时,应从数据库中提取下拉列表值
问题:
如何在提交后在下拉列表框中显示数据库中的提取值。
因为它与早期场景冲突(加载时从数据库动态获取值)!!
/*
<sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver"
url="jdbc:odbc:lab"
var="localSource"
/>
<sql:query dataSource="${localSource}"
sql="select cate_id,cate_desc from category"
var="result" />
<select name="cate_id">
<c:forEach items="${result.rows}" var="r">
<c:choose>
<c:when test="${r.cate_id eq a }"> // I got a value from request.getattribute
<option value="${r.cate_id}" selected="selected">${r.cate_desc}</option>
</c:when>
<c:otherwise>
<option value="${r.cate_id}">${r.cate_desc}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
* /
问题
它在复选框中显示数据库中的值,但是在提交表单
之后页面未在复选框中显示用户选择的值。(显示所有值)
请帮帮我
答案 0 :(得分:0)
最初加载JSP页面时,应从数据库中提取下拉列表值
首先创建一个POJO类,将所有表单信息保存在一个地方,如:
public class UserFormDTO {
private Integer id;
private String name;
private String selectedOption;
private List<String> options;
public UserFormDTO(){}
//getters and setters
}
在servlet doPost()
中提交表单:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//build UserFormDTO instance form user filled fields
//store UserFormDTO in database here..
}
从servlet的doGet()
中的数据库中检索UserFormDTO实例,并将其添加到请求中以在jsp中使用:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Retrieve UserFormDTO instance from database
//add it to request
request.setAttribute("userFormDTO", userFormDTO);
//forward to jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("userForm.jsp");
dispatcher.forward(request, response);
}
使用jstl jsp:
在jsp渲染表单中添加
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
在jsp的顶部然后, 在下拉列表中显示所选值 渲染形式如:
<form action="someAction" method="post">
id:
<input type="text" name="id"/>
Name:
<input type="text" name="name"/>
Options:
<select name="selectedOption">
<c:forEach items="${userFormDTO.options}" var="opt">
<c:choose>
<c:when test="${opt eq userFormDTO.selectedOption}">
<option value="${opt}" selected="selected">${opt}</option>
</c:when>
<c:otherwise>
<option value="${opt}">${opt}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
<input type="submit"/>
</form>
<小时/> 注意:强> jstl.jar应该在CLASSPATH中可用,以便使用
<c:tag..