这是我的问题:我有一个 jsp,其中有一个使用数据表的表。它在表的末尾显示一些带有编辑按钮的用户。如果您点击“编辑”按钮,它会调用一个 javascript 函数从表中获取 userID,并通过 ajax $post.
方法将其传递给 servlet。
servlet 通过 hibernate 从数据库接收数据并将其映射到对象中。
我的代码到目前为止一直有效。现在我想将对象传递给 jsp 并在新窗口中打开它(弹出窗口或内部带有表单的内容,用于使用对象中的数据设置它们以编辑被调用的用户)。
- 我可以从 servlet 执行此操作吗?或者我必须从 ajax 执行此操作吗? 调用成功?
最佳答案
有两种方法可以做到这一点:客户端渲染或服务器端渲染:
1.服务器端
您不需要那个 servlet,您需要的是为输入表单制作第二个 JSP 文件。在 Javascript 中,打开一个包含表单条目 JSP 页面地址的新窗口,并将 userId 参数添加到该页面的查询字符串中:
function onRowClick(userId){
//Open new window with the address: 'formEntry.jsp?userId=' + userId
}
在 formEntry.jsp 中,您可以从请求参数中获取此 ID:
String userId = request.getParameter("userId");
然后您可以使用此 userID 来检索您的用户对象:
//get user from dao or service objects
User myUser = someUserService.findUserById(userId);
然后在 JSP 页面中您可以创建输入字段,如下所示:
<input name="firstName" type="String" value="<%= myUser.getFirstName %>"
关于在jsp中使用java代码(注释): 您写的是不在 JSP 页面中编写 Java 代码,但为此目的您有 2 个选择:
- 使用一些服务器端 MVC 框架(例如 JSF)将 View 与模型和 Controller 分开
- 使用纯 JSP,但不要在 JSP 中使用较低级别的层,仅使用服务层,并且最好使用一些标记库来减少 JSP 中所需的 java 代码
2.客户端
第二种方法是使用更多的 javascript 来处理任务。 您可以采用 servlet 方式,让 servlet 返回 User 对象的 JSON 字符串。在 javascript 中,您获取 json 并解析它,并将其字段放入 html 标签中:
function ajaxRequestSuccessHandler(data){
var user = //parse data and make a javascript object
document.getElementById('firstName').value = user.firstName;
....
//load all of data in your form.
}
然后您可以将表单提交到 servlet 并保存更新的数据。
- 请注意,这种方法适用于 1 或 2 个表单,但如果您正在开发更大的软件,则需要使用更多工具和框架:
1.最好使用 JAX-RS 或 Spring-MVC 来公开 RESTful 服务并在 javascript 中使用主题,而不是使用纯 servlet。
2.更好地利用一些客户端 MV* 框架,如 angularJS 或 ReactJS。
关于javascript - 如何将数据传递到jsp并从servlet在新窗口中打开它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838665/