【问题标题】:How to fill the html form in jsp with the dispatched data from servlet?如何用 servlet 发送的数据填充 jsp 中的 html 表单?
【发布时间】:2012-08-21 17:45:56
【问题描述】:

我是 JSP 和 Servlet 的新手。我在以下任务中需要您的建议。 我有一个 jsp 页面,它有一个 html 表单,它接受来自用户的一些信息。

JSP 页面 info.jsp

<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<%
    if(request.getAttribute("reply")!=null){
        out.println(request.getAttribute("reply"));
    }
%>

<form action="actionservlet" method="post" name="myform">
user Name:<input name="username" type="text" size="10" /><br />
First Name:<input name="username" type="text" size="10" /><br />
Last Name:<input name="username" type="text" size="10" /><br />
Email id:<input name="username" type="text" size="10" /><br />
<input name="submit" type="submit" value="Submit" />
<input name="Reset" type="reset" value="Reset" />

</form>
</body>
</html>

当这个客户端输入信息并提交表单时,表单中的数据被设置为 actionservlet,它检查用户输入的用户名是否 已存在于数据库中。如果用户名已经存在,那么它将数据发送回调用 jsp,并带有一个额外的属性“回复”和值为 适当的消息。即“用户已存在”,如果输入的用户名已经存在于数据库中或“用户信息保存成功!”如果数据保存成功。

我想做类似的事情每当用户输入已经存在的用户名并提交表单时,在这种情况下,所有数据都会发送回 jsp 应该填写到他们各自的文本框。因此该用户只能输入另一个用户名并再次提交此表单。 如何完成上述任务。

我正在考虑将 jsp scriplet 添加到每个文本框的 value 属性中,并检查此消息是否重播。如果回复消息是关于 重复的用户名,那么它应该将值分配给 value 属性,否则 value 属性将保持为空。但我认为这个解决方案不是最优的 因为随着表单中字段数量的增加,这个解决方案会变得有点乏味。而且我认为因此它会引起一些 某种冗余代码。 所以我想问问专家,有没有其他方法可以做到这一点。我只想在出现错误或重复消息时填写表格,而不是 当成功消息到来时。

谢谢!

【问题讨论】:

    标签: jsp servlets forms


    【解决方案1】:

    在 JSP 中使用 Java 代码是一种不好的做法,而且 Scriptlet 已经过时,您应该避免使用它。

    JSP 2.0 表达式语言就是解决方案。下载 jstl.jar 并将其添加到您的类路径中。

    JSP

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <div><b>${reply}</b></div>
    <form action="actionservlet" method="post" name="myform">
    user Name:<input name="username" type="text" size="10" /><br />
    First Name:<input name="firstName" type="text" size="10" value=${firstName}/><br />
    Last Name:<input name="lastName" type="text" size="10" value=${lastName}/><br />
    Email id:<input name="email" type="text" size="10" value=${email}/><br />
    <input name="submit" type="submit" value="Submit" />
    <input name="Reset" type="reset" value="Reset" />
    </form>
    

    在 Servlet 中获取参数。执行您想做的操作/任务。 在 Servlet 中设置请求属性。将页面转发到 JSP。

    Servlet

    String firstName = request.getParameter("firstName");
    // and so on get other form parameters..
    // perform your opeations
    
    request.setAttribute("reply", "User Already Exists"); // Just an example
    request.setAttribute("firstName", firstName);
    // set other form parameters..
    
    RequestDispatcher dispatcher =
    request.getRequestDispatcher("/el/scoped-vars.jsp");
    dispatcher.forward(request, response);
    

    如果表达式语言不起作用,请查看此link 的更多信息。

    阅读基本的表达语言:http://pdf.coreservlets.com/JSP-EL.pdf

    【讨论】:

    • 谢谢!朋友为您的解决方案,它看起来棒极了!我有一个疑问,我的应用程序可能会部署在 Internet 上,也可能会部署在仅在办公室 LAN 上的本地。服务器未连接到互联网。所以查询是在您的解决方案中,您在 jsp 页面的开头添加了行 java.sun.com/jsp/jstl/core" %> 。此行包含网络上的一些 url。那么如何从jsp页面中去掉web的这种依赖呢?
    • @BalusC 谢谢!期待你的答复。但我不明白你到底想说什么。请您详细说明一下!
    猜你喜欢
    • 2012-07-31
    • 2013-08-13
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2016-10-10
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多