如何将数据传递给jsp并在servlet的新窗口中打开它

时间:2016-04-25 10:59:14

标签: javascript jquery ajax jsp servlets

这是我的问题:我有一个使用数据表的表的jsp。它会在表格末尾显示一些带有编辑按钮的用户。如果你点击"编辑"按钮,它调用一个javascript函数从表中获取userID并通过ajax $post.方法将其传递给servlet。 servlet通过hibernate从数据库接收数据并将其映射到对象中。 我的代码工作到此为止。现在我想将对象传递给jsp并在一个新窗口中打开它(一个弹出窗口或里面有一个窗体的东西,用来设置对象中的数据来编辑被叫用户)。

  • 我可以从servlet做到吗?或者我必须从ajax做到这一点 电话会成功吗?

1 个答案:

答案 0 :(得分:0)

有两种方法可以执行此操作:客户端渲染或服务器端渲染:

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代码,但为此您有两个选择:

  • 使用某些服务器端MVC框架(如JSF)将视图与模型和控制器分开
  • 使用纯JSP,但不要在JSP中使用较低级别的层,只使用服务层,也最好使用一些taglib来减少JSP中所需的Java代码


2.Client Side

第二种方法是使用更多的javascript来处理任务。 您可以使用servlet方式,让servlet返回User对象的JSON String。在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。