![](/img/trans.png)
[英]How to pass input value from multipart/form-data in jsp to servlet?
[英]How to validate JSP with Servlet and keep input data?
我需要一点帮助将JSP和两个Java Servlet绑定在一起。 我有以下几点:
在JSP上:
- 带有onchange =“ submit()”的前两个单选按钮
- div容器,仅当其中一个单选按钮处于活动状态(包含接下来的两个按钮)时才会显示
- 根据单选按钮的选择填充一些下拉菜单
- 一些输入字段
两个Servlet:
- 一个用于填充下拉菜单
- 第二个用于验证其他所有内容并在成功的情况下填充数据库/重定向到另一个页面,...
总体运行良好,数据库部分也是如此。
不同的下拉菜单只有一些组合(实际上,如下面的代码片段所示,有更多的值和更多的下拉菜单)。 我的问题是:每当验证失败时,JSP就会重新加载(这显然可以),我的选择消失了,我开始在单选按钮选项之间进行选择。
将单选按钮的值从Servlet 1传递到Servlet 2看起来很完美。 (我已经尝试在Servlet2的重新加载中使用相同的方法(request.set ...),但是它不起作用。)验证也可以正常工作。
问题 :如何获得验证后像以前一样预先选择单选按钮(以及其他输入字段)的信息? 我只想显示一条错误消息并保留所有输入值。
如果这很重要,请在代码的某些部分进行更改,以使名称保持一致。 如果有人知道如何将其放在按需/扰流器容器中,请随时进行编辑。
input.jsp
<body>
<span class="messages">${messages.ERROR}</span>
<form action="/project/chooseRadio" method="get">
<h2>Radio</h2>
<input type="radio" name="option" onchange="submit()"
value="option1"
${param.option == 'option1' ? 'checked' : ''}>
<input type="radio"
name="option" onchange="submit()" value="option2"
${param.option== 'option2' ? 'checked' : ''}>
</form>
<form action="/project/input" method="post">
<div
style="display:${(option == 'option1' || option == 'option2') ? 'block' : 'none'}">
<select name="dd1">
<c:forEach items="${dd1}" var="dd1">
<option><c:out value="${dd1}" /></option>
</c:forEach>
</select>
<select name="dd2">
<c:forEach items="${dd2}" var="dd2">
<option><c:out value="${dd2}" /></option>
</c:forEach>
<input type="text" name="inputfield1" required="true" /> <br>
<input type="text" name="inputfield2" required="true" /> <br>
<input type="submit" name="submit"
value="submit" />
</span>
</div>
</form>
</body>
选择Radio-Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// option1
int[] dd1_1 = { 1, 2, 3, 4 };
int[] dd2_1 = { 1, 2, 3, 4 };
// option2
int[] dd1_2 = { 9, 8, 7, 6 };
int[] dd2_2 = { 9, 8, 7, 6 };
if (request.getParameter("option") != null) {
switch (request.getParameter("option")) {
case "option 1":
request.setAttribute("option", "option1");
request.setAttribute("dd1", dd1_1);
request.setAttribute("dd2", dd2_1);
break;
case "option2":
request.setAttribute("gratingType", "option2");
request.setAttribute("dd1", dd1_2);
request.setAttribute("dd2", dd2_2);
break;
default:
break;
}
}
request.getRequestDispatcher("/WEB-INF/input.jsp").forward(request, response);
}
输入Servlet
@WebServlet("/input")
public class InputServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/input.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DTO dto = new DTO();
Map<String, String> messages = new HashMap<String, String>();
switch (request.getParameter("option")) {
case "option1":
dto.setOption("option1");
break;
case "option2":
dto.setOption("option2");
break;
default:
break;
}
dto.setInputfield1(Integer.parseInt(request.getParameter("inputfield1")));
// ... dto.set for other fields ... //
// save dto in database
// validation
if(validCombination(...)){
request.getRequestDispatcher("/WEB-INF/output.jsp").forward(request, response);
}
else {
messages.put("ERROR", String.format("this is not a valid combination."));
request.setAttribute("messages", messages);
request.getRequestDispatcher("/WEB-INF/input.jsp").forward(request, response);
}
}
你真的有三个选择
选项1和2将值保留在字段中。 选项3将要求您填充值并显示错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.